Amazon Athena Neptune コネクタ
Amazon Neptune は、高速で信頼性に優れたフルマネージド型のグラフデータベースサービスで、高度に接続されたデータセットを使用するアプリケーションの構築と実行を容易にします。Neptune の高性能専用グラフデータベースエンジンは、数十億のリレーションシップを最適に保存し、ミリ秒単位のレイテンシーでグラフをクエリします。詳細については、「Neptune ユーザーガイド」を参照してください。
Amazon Athena Neptune コネクタは、Athena が Neptune グラフデータベースインスタンスとやり取りすることを可能にして、SQL クエリがNeptune グラフデータにアクセスできるようにします。
アカウントで Lake Formation を有効にしている場合、AWS Serverless Application Repository でデプロイした Athena フェデレーション Lambda コネクタの IAM ロールには、Lake Formation での AWS Glue Data Catalog への読み取りアクセス権が必要です。
前提条件
Neptune コネクタを使用するには、次の 3 つのステップが必要です。
-
Neptune クラスターのセットアップ
-
AWS Glue Data Catalog のセットアップ
-
AWS アカウント へのコネクタのデプロイ。詳細については、「データソースコネクタをデプロイする」または「AWS Serverless Application Repository を使用してデータソースコネクタをデプロイする」を参照してください。Neptune コネクタのデプロイに関するその他の詳細については、GitHub.com で「Deploy the Amazon Athena Neptune Connector
」(Amazon Athena Neptune コネクタのデプロイ) を参照してください。
制約事項
現在、Neptune コネクタには以下のような制限があります。
-
プライマリキー (ID) を含む列の射影はサポートされていません。
Neptune クラスターのセットアップ
使用したい既存の Amazon Neptune クラスターとプロパティグラフデータセットがない場合は、セットアップする必要があります。
Neptune クラスターをホストする VPC にインターネットゲートウェイと NAT ゲートウェイがあることを確認してください。Neptune コネクタ Lambda 関数が使用するプライベートサブネットには、この NAT ゲートウェイを経由するインターネットへのルートが必要です。Neptune コネクタの Lambda 関数は NAT ゲートウェイを使用して AWS Glue と通信します。
新しい Neptune クラスターをセットアップしてサンプルデータセットとともにロードする手順については、GitHub.com で「Sample Neptune Cluster Setup
AWS Glue Data Catalog のセットアップ
従来のリレーショナルデータストアとは異なり、Neptune グラフ DB ノードとエッジは設定されたスキーマを使用しません。各エントリには、異なるフィールドとデータ型を設定できます。ただし、Neptune コネクタは AWS Glue Data Catalog からメタデータを取得するので、必要なスキーマのテーブルを含む AWS Glue データベースを作成する必要があります。AWS Glue データベースとテーブル作成したら、コネクタは Athena からのクエリに使用できるテーブルのリストに入力できます。
大文字と小文字を区別しない列の照合を有効にする
AWS Glue の列名がすべて小文字である場合でも、Neptune テーブルの列名を正しい大文字と小文字で解決するには、大文字と小文字を区別しない照合を行うように Neptune コネクタを構成できます。
この機能を有効にするには、Neptune コネクタの Lambda 関数で enable_caseinsensitivematch
環境変数を true
に設定します。
大文字と小文字を区別するテーブル名に AWS Glue glabel テーブルパラメータを指定する
AWS Glue は小文字のテーブル名のみをサポートしているため、Neptune 用の AWS Glue テーブルを作成する際には、glabel
AWS Glue テーブルパラメータを指定することが重要です。
AWS Glue テーブルの定義に glabel
パラメータを含めて、その値を元の大文字と小文字を区別したテーブル名に設定します。これにより、AWS Glue が Neptune テーブルとやり取りするときに、大文字と小文字が正しく区別された状態が維持されます。次の例では、glabel
の値をテーブル名 Airport
に設定します。
glabel = Airport
Neptune とのやり取りを考慮して AWS Glue Data Catalog を設定するための詳細については、GitHub.com に掲載されている「Set up AWS Glue Catalog
パフォーマンス
Athena Neptune コネクタは、述語のプッシュダウンを実行して、クエリによってスキャンされるデータを減少させます。ただし、プライマリキーを使用する述語はクエリに失敗します。LIMIT
句はスキャンされるデータ量を減らしますが、述語が提供されない場合は、LIMIT
句を含む SELECT
クエリは少なくとも 16 MB のデータをスキャンすることを想定する必要があります。Neptune コネクタは、同時実行によるスロットリングに強いです。
パススルークエリ
Neptune コネクタは、パススルークエリをサポートします。この機能を使用すると、プロパティグラフで Gremlin クエリを実行したり、RDF データに対して SPARQL クエリを実行したりできます。
Neptune でパススルークエリを作成するには、以下の構文を使用します。
SELECT * FROM TABLE( system.query( DATABASE => '
database_name
', COLLECTION => 'collection_name
', QUERY => 'query_string
' ))
次の Neptune パススルークエリの例では、コード ATL
の空港がフィルタリングされています。二重引用符はエスケープ用です。
SELECT * FROM TABLE( system.query( DATABASE => 'graph-database', COLLECTION => 'airport', QUERY => 'g.V().has(''airport'', ''code'', ''ATL'').valueMap()' ))
追加リソース
このコネクタに関するその他の情報については、GitHub.com で対応するサイト