SQL Developerを使用したOracle Graphの開始 (2023/11/29)

SQL Developerを使用したOracle Graphの開始 (2023/11/29)

https://medium.com/@ramumurakamig/get-started-with-oracle-graph-using-sql-developer-e5ccbd61c9fb

投稿者:Ramu Murakami Gutierrez



Oracle Databaseでグラフ問合せの実行を開始する最速の方法は、SQL Developerをダウンロードすることです。必要な前提条件は、必要な権限を持つデータベース・ユーザーが作成されたOracle Databaseのみです。このブログでは、Oracle Database 23cを使用してSQL問合せを実行し、Oracle Database 19cを使用してPGQL問合せを実行しますが、PGQLはすべてのデータベース・エディションで使用します。


まず、グラフが役に立つ理由を見てみましょう。


データは接続されており、それらの接続によってインサイトが得られるため、関係を追跡する複雑な問題に対処できます。様々な業界で、グラフを使用して問題を解決します。次に例を示します。


  • 金融サービス: 不正取引を検出し、クライアント分析を実施して、最良の顧客を選ぶ。
  • 治安: 警察が事件を調査し、ソーシャルメディアのインタラクションを監視したり、国に旅行している人をコントロールしたりするため。
  • サイバーセキュリティ: マルウェアを自動的に特定し、リスクと脆弱性を特定すること。


さあ始めましょう


グラフを操作するデータベース・ユーザーに権限を付与するスクリプトを次に示します。

CREATE USER <graph usernamer> IDENTIFIED BY <password>;
GRANT CREATE SESSION, CREATE TABLE, CREATE VIEW TO <graph username>;
ALTER USER <graph username> DEFAULT TABLESPACE DATA;
ALTER USER <graph username> QUOTA unlimited ON DATA;


開始するステップは次のとおりです。

SQL Developerのインストール


  1. このリンクに移動して、最新バージョンのSQL Developerをダウンロードします。
  2. Oracleライセンス契約を確認して同意します。



3. ダウンロードしたzipファイルを目的のディレクトリに移動します。

4. ファイルを解凍して開きます。

5.sqldeveloper.exeファイルをダブルクリックして、SQL Developerを開きます。


SQL Developerの起動



SQL Developerからのデータベースへの接続


データベース接続の作成に必要なもの:


  • データベース名
  • データベースのユーザー名とパスワード
  • ホスト名
  • ポート
  • サービス名
  • Cloud Wallet (Autonomous Databaseを使用して接続している場合)


新規接続



>ノート: OCIで作成されたDBシステムに接続する場合、ホスト名はパブリックIPアドレスになります。


Autonomous Databaseを使用している場合は、接続タイプをBasicからCloud Walletに変更し、「構成ファイル」で、OCIのAutonomous Databaseの詳細ページからダウンロードしたクラウド・ウォレットを参照して選択します。


接続をテストし、ステータスが「成功」の場合は「接続」をクリックします。



データのロード


SQL Developerからデータベースへの接続が完了したので、グラフ問合せの実行に使用するデータをロードする準備が整いました。グラフ問合せを実行するデータセットを自由にアップロードしてください。この例では、2つの表bank_accountsおよびbank_transfersをアップロードしてグラフ問合せを実行し、不正なトランザクションを示す可能性のある循環支払を検索します。データセットは、GitHubにあります。


SQLワークシートで、CreateBankGraphDataset.SQL問合せを実行して2つの表を作成します。


CreateBankGraphDataset.sqlスクリプトの実行


2. GitHubからBANK_ACCOUNTS.csvおよびBANK_TRANSFERS.csvファイルをダウンロードし、前のスクリプトで作成した対応する表にデータをインポートします。


「データのインポート」オプション



グラフ問合せの実行


Oracle Databaseがある場合は、SQLまたはPGQLを使用してグラフ問合せを実行できます。23cの最新バージョンのOracle Databaseでは、SQLとPGQLの両方がサポートされています。19c以前を実行している場合は、PGQLを使用できます。


SQLを使用したグラフ問合せの実行


SQLワークシートで次を実行します。


1. 作成した2つの表からプロパティ・グラフを作成します。

CREATE PROPERTY GRAPH BANK_GRAPH 
VERTEX TABLES (
BANK_ACCOUNTS
KEY (ID)
PROPERTIES (ID, Name, Balance)
)
EDGE TABLES (
BANK_TRANSFERS
KEY (TXN_ID)
SOURCE KEY (src_acct_id) REFERENCES BANK_ACCOUNTS(ID)
DESTINATION KEY (dst_acct_id) REFERENCES BANK_ACCOUNTS(ID)
PROPERTIES (src_acct_id, dst_acct_id, amount)
);


2. 受信転送によって上位10件のアカウントを検索します。

SELECT acct_id, COUNT(1) AS Num_Transfers 
FROM graph_table ( BANK_GRAPH
MATCH (src) - [IS BANK_TRANSFERS] -> (dst)
COLUMNS ( dst.id AS acct_id )
) GROUP BY acct_id ORDER BY Num_Transfers DESC FETCH FIRST 10 ROWS ONLY;


3. 同じアカウントで開始および終了する5ホップ転送があるかどうかを確認します。

SELECT acct_id, COUNT(1) AS Num_5hop_Chains 
FROM graph_table (BANK_GRAPH
MATCH (src) - []->{5} (src)
COLUMNS (src.id AS acct_id)
) GROUP BY acct_id ORDER BY Num_5hop_Chains DESC;


4.3-5ホップの円形支払チェーンがある(任意の10)アカウントをリストします。

SELECT DISTINCT(account_id) 
FROM GRAPH_TABLE(BANK_GRAPH
MATCH (v1)-[IS BANK_TRANSFERS]->{3,5}(v1)
COLUMNS (v1.id AS account_id)
) FETCH FIRST 10 ROWS ONLY;



PGQLを使用したグラフ問合せの実行


  1. PGQLワークシートを開きます。データベース接続のオプションを展開し、プロパティ・グラフを右クリックします。「Open PGQL Worksheet」を選択します。


PGQLワークシートを開く


2. 作成した2つの表からプロパティ・グラフを作成します。

CREATE PROPERTY GRAPH BANK_GRAPH_PGQL
VERTEX TABLES (
BANK_ACCOUNTS
KEY ( ID )
LABEL accounts PROPERTIES ( ID, name )
)
EDGE TABLES (
BANK_TRANSFERS
SOURCE KEY ( src_acct_id ) REFERENCES BANK_ACCOUNTS(ID)
DESTINATION KEY ( dst_acct_id ) REFERENCES BANK_ACCOUNTS(ID)
LABEL transfers PROPERTIES ( amount, description, src_acct_id, dst_acct_id, txn_id )
) OPTIONS (PG_VIEW);


3. 受信転送によって上位10件のアカウントを検索します。

SELECT dst.id as acct_id, COUNT(1) AS Num_Transfers 
FROM MATCH (src) - [:TRANSFERS] -> (dst) ON BANK_GRAPH_PGQL
GROUP BY dst.id
ORDER BY Num_Transfers DESC FETCH FIRST 10 ROWS ONLY;


4. 同じアカウントで開始および終了する5ホップ転送があるかどうかを確認します。

SELECT src.id AS acct_id, COUNT(1) AS Num_5hop_Chains 
FROM MATCH (src) - []->{5} (src) ON BANK_GRAPH_PGQL
GROUP BY acct_id
ORDER BY Num_5hop_Chains DESC;


5.3-5ホップの円形支払チェーンがある(任意の10)アカウントをリストします。

SELECT DISTINCT(v1.id) AS account_id 
FROM MATCH (v1)-[:TRANSFERS]->{3,5}(v1) ON BANK_GRAPH_PGQL
FETCH FIRST 10 ROWS ONLY;


おめでとうございます!SQL Developerからデータベースに接続し、データをロードして、いくつかのグラフ問合せを実行しました。

Medium (= all articles with Oracle Graph tag)

Stack Overflow (= questions with oracle-graph tag)

Slack AnDOUC (= invitation link, please visit #graph)

Slack OracleDevRel (= invitation link, please visit #oracle-db-graph)

Youtube Channel

コメント

このブログの人気の投稿

Oracle RACによるメンテナンスのためのドレインとアプリケーション・コンティニュイティの仕組み (2023/11/01)

Oracle Cloud Infrastructure Secure Desktopsを発表: デスクトップ仮想化のためのOracleのクラウドネイティブ・サービス (2023/06/28)

Oracle Cloudのデータベースをオブジェクト・ストレージにバックアップする3つの方法 (2021/12/13)