Amazon Athena Teradata コネクタ - Amazon Athena

Amazon Athena Teradata コネクタ

Teradata 用の Amazon Athena コネクタを使用すると、Athena で Teradata データベースに保存されたデータに SQL クエリを実行できます。

前提条件

制約事項

  • DDL の書き込みオペレーションはサポートされていません。

  • マルチプレクサの設定では、スピルバケットとプレフィックスが、すべてのデータベースインスタンスで共有されます。

  • 関連性のある Lambda 上限値。詳細については、AWS Lambda デベロッパーガイドLambda のクォータを参照してください。

規約

Teradata コネクタに関連する用語を次に示します。

  • データベースインスタンス – オンプレミス、Amazon EC2、または Amazon RDS にデプロイされたデータベースの任意インスタンス。

  • ハンドラー – データベースインスタンスにアクセスする Lambda ハンドラー。ハンドラーには、メタデータ用とデータレコード用があります。

  • メタデータハンドラー – データベースインスタンスからメタデータを取得する Lambda ハンドラー。

  • レコードハンドラー – データベースインスタンスからデータレコードを取得する Lambda ハンドラー。

  • 複合ハンドラー — データベースインスタンスからメタデータとデータレコードの両方を取得する Lambda ハンドラー。

  • プロパティまたはパラメータ – ハンドラーがデータベース情報を抽出するために使用するデータベースプロパティ。これらのプロパティは Lambda の環境変数で設定します。

  • 接続文字列 – データベースインスタンスへの接続を確立するために使用されるテキスト文字列。

  • カタログ – Athena に登録された AWS Glue ではないカタログ。これは、connection_string プロパティに必須のプレフィックスです。

  • マルチプレックスハンドラー – 複数のデータベース接続を受け入れて使用することが可能な Lambda ハンドラー。

Lambda レイヤーの前提条件

Teradata コネクタを Athena で使用するには、Teradata JDBC ドライバーを含む Lambda レイヤーを作成する必要があります。Lambda レイヤーとは、Lambda 関数の追加コードを含む .zip ファイルアーカイブです。Teradata コネクタをアカウントにデプロイする場合は、レイヤー の ARN を指定します。これにより、Teradata JDBC ドライバーを含む Lambda レイヤーが Teradata コネクタに接続されるため、Athena で使用できるようになります。

Lambda レイヤーの詳細については、「AWS Lambda デベロッパーガイド」の「Lambda レイヤーの作成と共有」を参照してください。

Teradata コネクタの Lambda レイヤーを作成するには

  1. Teradata JDBC ドライバーダウンロードページ (https://downloads.teradata.com/download/connectivity/jdbc-driver) にアクセスしてください。

  2. Teradata JDBC ドライバーをダウンロードします。ウェブサイトでは、アカウントを作成し、ファイルをダウンロードするためのライセンス契約に同意する必要があります。

  3. ダウンロードしたアーカイブファイルから terajdbc4.jar ファイルを抽出します。

  4. 次のフォルダ構造を作成し、そこに .jar ファイルを配置します。

    java\lib\terajdbc4.jar

  5. terajdbc4.jar ファイルを含むフォルダ構造全体を .zip ファイルにします。

  6. AWS Management Console にサインインして AWS Lambda コンソール (https://console.aws.amazon.com/lambda/) を開きます。

  7. ナビゲーションペインで [Layers] (レイヤー) を選択し、[Create layer] (レイヤーの作成) を選択します。

  8. [Name] (名前) に、レイヤーの名前 (例: TeradataJava11LambdaLayer) を入力します。

  9. [Upload a .zip file] (.zip ファイルのアップロード) オプションがオンになっていることを確認します。

  10. [Upload] (アップロード) を選択して、Teradata JDBC ドライバーを含む zip に圧縮されたフォルダをアップロードします。

  11. [Create] を選択します。

  12. レイヤーの詳細ページで、ページ上部にあるクリップボードアイコンを選択して、レイヤー ARN をコピーします。

  13. ARN を参照用に保存します。

パラメータ

このセクションの Lambda 環境変数を使用して Teradata コネクタを設定します。

接続文字列

次の形式の JDBC 接続文字列を使用して、データベースインスタンスに接続します。

teradata://${jdbc_connection_string}

マルチプレックスハンドラーの使用

マルチプレクサーを使用すると、単一の Lambda 関数から複数のデータベースインスタンスに接続できます。各リクエストはカタログ名によりルーティングされます。Lambda では以下のクラスを使用します。

Handler Class
複合ハンドラー TeradataMuxCompositeHandler
メタデータハンドラー TeradataMuxMetadataHandler
レコードハンドラー TeradataMuxRecordHandler

多重化ハンドラーパラメータ

パラメータ 説明
$catalog_connection_string 必須。データベースインスタンス接続の文字列。文字列には、Athena で使用されているカタログの名前をプレフィックスます。例えば、Athena に登録されたカタログが myteradatacatalog の場合、環境変数の名前は myteradatacatalog_connection_string になります。
default 必須。デフォルトの接続文字列。この文字列は、カタログが lambda:${AWS_LAMBDA_FUNCTION_NAME} の場合に使用されます。

teradata1 (デフォルト) と teradata2 の 2 つのデータベースインスタンスをサポートする Teradata MUX Lambda 関数用のプロパティを次に示します。

プロパティ
default teradata://jdbc:teradata://teradata2.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,user=sample2&password=sample2
teradata_catalog1_connection_string teradata://jdbc:teradata://teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,${Test/RDS/Teradata1}
teradata_catalog2_connection_string teradata://jdbc:teradata://teradata2.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,user=sample2&password=sample2

認証情報の提供

JDBC 接続文字列の中でデータベースのユーザー名とパスワードを指定するには、接続文字列のプロパティ、もしくは AWS Secrets Manager を使用します。

  • 接続文字列 – ユーザー名とパスワードを、JDBC 接続文字列のプロパティとして指定できます。

  • AWS Secrets Manager – Athena の横串検索機能を AWS Secrets Manager で使用するには、Lambda 関数に接続されている VPC に、Secrets Manager に接続するためのインターネットアクセスまたは VPC エンドポイントが必要です。

    JDBC 接続文字列には、AWS Secrets Manager のシークレットの名前を含めることができます。コネクタは、このシークレット名を Secrets Manager からの username および password 値に置き換えます。

    Amazon RDS データベースインスタンスには、このサポートが緊密に統合されています。Amazon RDS を使用している場合は、AWS Secrets Manager と認証情報ローテーションの使用を強くお勧めします。データベースで Amazon RDS を使用していない場合は、認証情報を次の形式の JSON として保存します。

    {"username": "${username}", "password": "${password}"}

シークレット名を含む接続文字列の例

次の文字列には、シークレット名 ${Test/RDS/Teradata1} が含まれています。

teradata://jdbc:teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,${Test/RDS/Teradata1}&...

コネクタは、次の例のように、シークレットの取得と、ユーザー名とパスワードの提供のために、シークレット名を使用します。

teradata://jdbc:teradata://teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,...&user=sample2&password=sample2&...

現在、Teradata は userpassword の JDBC プロパティを認識します。また、ユーザー名とパスワードを、userpassword のキーなしで、ユーザー名/パスワードの形式で受け付けます。

単一接続ハンドラーの使用

次の単一接続のメタデータハンドラーとレコードハンドラーを使用して、単一の Teradata インスタンスに接続できます。

ハンドラーのタイプ Class
複合ハンドラー TeradataCompositeHandler
メタデータハンドラー TeradataMetadataHandler
レコードハンドラー TeradataRecordHandler

単一接続ハンドラーのパラメータ

パラメータ 説明
default 必須。デフォルトの接続文字列。この文字列は、カタログが認識されない場合に使用されます。

単一接続ハンドラーでは、1 つのデータベースインスタンスがサポートされます。また、default 接続文字列パラメータを指定する必要があります。他のすべての接続文字列は無視されます。

Lambda 関数でサポートされる単一の Teradata インスタンス用のプロパティ例を次に示します。

プロパティ
default teradata://jdbc:teradata://teradata1.host/TMODE=ANSI,CHARSET=UTF8,DATABASE=TEST,secret=Test/RDS/Teradata1

スピルパラメータ

Lambda SDK は Amazon S3 にデータを流出させる可能性があります。同一の Lambda 関数によってアクセスされるすべてのデータベースインスタンスは、同じ場所に対しスピルします。

パラメータ 説明
spill_bucket 必須。スピルバケット名。
spill_prefix 必須。スピルバケットのキープレフィックス
spill_put_request_headers (オプション) スピルに使用される Amazon S3 の putObject リクエスト (例:{"x-amz-server-side-encryption" : "AES256"}) における、リクエストヘッダーと値に関する JSON でエンコードされたマップ。利用可能な他のヘッダーについては、「Amazon S3 API リファレンス」の「PutObject」を参照してください。

サポートされるデータ型

次の表に、JDBC と Apache Arrow 間で対応するデータ型を示します。

JDBC Arrow
ブール値 Bit
整数 Tiny
ショート Smallint
整数 Int
Long Bigint
フロート Float4
ダブル Float8
日付 DateDay
タイムスタンプ DateMilli
文字列 Varchar
バイト Varbinary
BigDecimal 10 進数
配列 リスト

パーティションと分割

パーティションは、Integer 型の単一パーティション列で表されます。この列には、Teradata テーブルで定義されているパーティションのパーティション名が含まれます。パーティション名のないテーブルの場合、* が返されます。これは 1 つのパーティションと同じです。パーティションはスプリットと同等です。

名前 説明
パーティション 整数 Teradata の名前付きパーティション。

パフォーマンスチューニング

Teradata はネイティブパーティションをサポートしています。Athena Lambda コネクタは、これらのパーティションからデータを並列に取得できます。均一なパーティション分布の非常に大きなデータセットをクエリする場合は、ネイティブパーティションを強くお勧めします。

ライセンス情報

このコネクタを使用することにより、pom.xml ファイル内のリストにある、サードパーティのコンポーネントが使用されることを承認し、 GitHub.com にある LICENSE.txt ファイルに記載されている、個別のサードパーティライセンスの使用条件に同意したとみなされます。

以下も参照してください。

最新の JDBC ドライバーのバージョン情報については、GitHub.com の Teradata コネクタ用の pom.xml ファイルを参照してください。

このコネクタに関する追加情報については、GitHub.com で対応するサイトを参照してください。