Db2 AS/400 用の Amazon Athena コネクタは、Amazon Athena が JDBC を使用して IBM Db2 AS/400 (Db2 iSeries) データベースで SQL クエリを実行することを可能にします。
このコネクタをフェデレーティッドカタログとして Glue データカタログに登録することはできません。このコネクタは、Lake Formation で定義されているデータアクセスコントロールをカタログ、データベース、テーブル、列、行、タグレベルでサポートしていません。このコネクタは、Glue 接続を使用して Glue の設定プロパティを一元管理しています。
前提条件
Athena コンソールまたは AWS Serverless Application Repository を使用して AWS アカウント にコネクタをデプロイします。詳細については、「データソース接続を作成する」または「AWS Serverless Application Repository を使用してデータソースコネクタをデプロイする」を参照してください。
このコネクタを使用する際は、先に VPC とセキュリティグループをセットアップしておきます。詳細については、「データソースコネクタまたは AWS Glue 接続用の VPC を作成する」を参照してください。
制限
-
DDL の書き込みオペレーションはサポートされていません。
-
マルチプレクサの設定では、スピルバケットとプレフィックスが、すべてのデータベースインスタンスで共有されます。
-
関連性のある Lambda 上限値。詳細については、AWS Lambda デベロッパーガイドの Lambda のクォータを参照してください。
-
フィルター条件における日付とタイムスタンプのデータ型は、適切なデータ型にキャストする必要があります。
用語
以下は、Db2 AS/400 コネクタに関連する用語です。
-
データベースインスタンス – オンプレミス、Amazon EC2、または Amazon RDS にデプロイされたデータベースの任意のインスタンス。
-
ハンドラー – データベースインスタンスにアクセスする Lambda ハンドラー。ハンドラーには、メタデータ用とデータレコード用があります。
-
メタデータハンドラー – データベースインスタンスからメタデータを取得する Lambda ハンドラー。
-
レコードハンドラー – データベースインスタンスからデータレコードを取得する Lambda ハンドラー。
-
複合ハンドラー — データベースインスタンスからメタデータとデータレコードの両方を取得する Lambda ハンドラー。
-
プロパティまたはパラメータ – ハンドラーがデータベース情報を抽出するために使用するデータベースプロパティ。これらのプロパティは Lambda の環境変数で設定します。
-
接続文字列 – データベースインスタンスへの接続を確立するために使用されるテキスト文字列。
-
カタログ – Athena に登録された AWS Glue ではないカタログ。これは、
connection_string
プロパティに必須のプレフィックスです。 -
マルチプレックスハンドラー – 複数のデータベース接続を受け入れて使用することが可能な Lambda ハンドラー。
パラメータ
このセクションのパラメータを使用して Db2 AS/400 コネクタを設定します。
注記
2024 年 12 月 3 日以降に作成された Athena データソースコネクタは、AWS Glue 接続を使用します。
以下に示すパラメータ名と定義は、2024 年 12 月 3 日より前に作成された Athena データソースコネクタ用です。これらは、対応する AWS Glue 接続プロパティとは異なる場合があります。2024 年 12 月 3 日以降、以前のバージョンの Athena データソースコネクタを手動でデプロイする場合にのみ、以下のパラメータを使用します。
接続文字列
次の形式の JDBC 接続文字列を使用して、データベースインスタンスに接続します。
db2as400://${
jdbc_connection_string
}
マルチプレックスハンドラーの使用
マルチプレクサーを使用すると、単一の Lambda 関数から複数のデータベースインスタンスに接続できます。各リクエストはカタログ名によりルーティングされます。Lambda では以下のクラスを使用します。
Handler | Class |
---|---|
複合ハンドラー | Db2MuxCompositeHandler |
メタデータハンドラー | Db2MuxMetadataHandler |
レコードハンドラー | Db2MuxRecordHandler |
マルチプレックスハンドラーのパラメータ
パラメータ | 説明 |
---|---|
$ |
必須。データベースインスタンスの接続文字列。環境変数には、Athena で使用されているカタログの名前をプレフィックスします。例えば、Athena に登録されたカタログが mydb2as400catalog の場合、環境変数の名前は mydb2as400catalog_connection_string になります。 |
default |
必須。デフォルトの接続文字列。この文字列は、カタログが lambda:${ AWS_LAMBDA_FUNCTION_NAME } の場合に使用されます。 |
db2as4001
(デフォルト) と db2as4002
の 2 つのデータベースインスタンスをサポートする Db2 MUX Lambda 関数用のプロパティを次に示します。
プロパティ | 値 |
---|---|
default |
db2as400://jdbc:as400:// |
db2as400_catalog1_connection_string |
db2as400://jdbc:as400://db2as4001. |
db2as400_catalog2_connection_string |
db2as400://jdbc:as400://db2as4002. |
db2as400_catalog3_connection_string |
db2as400://jdbc:as400:// |
認証情報の提供
JDBC 接続文字列の中でデータベースのユーザー名とパスワードを指定するには、接続文字列のプロパティ、もしくは AWS Secrets Manager を使用します。
-
接続文字列 – ユーザー名とパスワードを、JDBC 接続文字列のプロパティとして指定できます。
重要
セキュリティ上のベストプラクティスとして、環境変数や接続文字列にハードコードされた認証情報を使用しないでください。ハードコードされたシークレットを AWS Secrets Manager に移動する方法については、「AWS Secrets Manager ユーザーガイド」の「ハードコードされたシークレットを AWS Secrets Manager に移動する」を参照してください。
-
AWS Secrets Manager – Athena フェデレーティッドクエリ機能を AWS Secrets Manager で使用するには、Secrets Manager に接続するためのインターネットアクセス
または VPC エンドポイントが、Lambda 関数に接続されている VPC に必要です。 JDBC 接続文字列には、AWS Secrets Manager のシークレットの名前を含めることができます。コネクタは、このシークレット名を Secrets Manager の
username
およびpassword
の値に置き換えます。Amazon RDS データベースインスタンスには、このサポートが緊密に統合されています。Amazon RDS を使用している場合は、AWS Secrets Manager と認証情報ローテーションの使用を強くお勧めします。データベースで Amazon RDS を使用していない場合は、認証情報を次の形式で JSON として保存します。
{"username": "${username}", "password": "${password}"}
シークレット名を含む接続文字列の例
次の文字列には、シークレット名 ${secret_name}
が含まれています。
db2as400://jdbc:as400://
<ip_address>
;<properties>
;:${<secret_name>
};
次の例のように、コネクタはシークレット名を使用し、シークレットを取得してユーザー名とパスワードを提供します。
db2as400://jdbc:as400://
<ip_address>
;user=<username>
;password=<password>
;<properties>
;
単一接続ハンドラーの使用
以下の単一接続のメタデータハンドラーとレコードハンドラーを使用して、単一の Db2 AS/400 インスタンスに接続することができます。
ハンドラーのタイプ | Class |
---|---|
複合ハンドラー | Db2CompositeHandler |
メタデータハンドラー | Db2MetadataHandler |
レコードハンドラー | Db2RecordHandler |
単一接続ハンドラーのパラメータ
パラメータ | 説明 |
---|---|
default |
必須。デフォルトの接続文字列。 |
単一接続ハンドラーでは、1 つのデータベースインスタンスがサポートされます。また、default
接続文字列パラメータを指定する必要があります。他のすべての接続文字列は無視されます。
以下は、Lambda 関数がサポートする単一の Db2 AS/400 用のプロパティ例です。
プロパティ | 値 |
---|---|
default |
db2as400://jdbc:as400:// |
スピルパラメータ
Lambda SDK は Amazon S3 にデータをスピルする可能性があります。同一の Lambda 関数によってアクセスされるすべてのデータベースインスタンスは、同じ場所にスピルします。
パラメータ | 説明 |
---|---|
spill_bucket |
必須。スピルバケット名。 |
spill_prefix |
必須。スピルバケットのキープレフィックス |
spill_put_request_headers |
(オプション) スピルに使用される Amazon S3 の putObject リクエスト (例:{"x-amz-server-side-encryption" :
"AES256"} ) における、リクエストヘッダーと値に関する JSON でエンコードされたマッピング。利用可能な他のヘッダーについては、「Amazon Simple Storage Service API リファレンス」の「PutObject」を参照してください。 |
サポートされるデータ型
次の表に、JDBC と Apache Arrow に対応するデータ型を示します。
Db2 AS/400 | Arrow |
---|---|
CHAR | VARCHAR |
VARCHAR | VARCHAR |
DATE | DATEDAY |
TIME | VARCHAR |
TIMESTAMP | DATEMILLI |
DATETIME | DATEMILLI |
BOOLEAN | BOOL |
SMALLINT | SMALLINT |
INTEGER | INT |
BIGINT | BIGINT |
DECIMAL | DECIMAL |
REAL | FLOAT8 |
DOUBLE | FLOAT8 |
DECFLOAT | FLOAT8 |
パーティションと分割
パーティションは、1 つまたは複数のタイプ varchar
のパーティション列で表されます。Db2 AS/400 コネクタは、以下の組織スキームを使用してパーティションを作成します。
-
ハッシュによる分散
-
範囲によるパーティション
-
ディメンションによる整理
コネクタは、1 つ、または複数の Db2 AS/400 メタデータテーブルから、パーティションの数や列名などのパーティションの詳細情報を取得します。スプリットは、特定されたパーティションの数に基づいて作成されます。
パフォーマンス
パフォーマンスを向上させるには、以下の例にあるように、述語のプッシュダウンを使用して Athena からクエリを実行してください。
SELECT * FROM "lambda:<LAMBDA_NAME>
"."<SCHEMA_NAME>
"."<TABLE_NAME>
"
WHERE integercol = 2147483647
SELECT * FROM "lambda: <LAMBDA_NAME>
"."<SCHEMA_NAME>
"."<TABLE_NAME>
"
WHERE timestampcol >= TIMESTAMP '2018-03-25 07:30:58.878'
パススルークエリ
Db2 AS/400 コネクタは、パススルークエリをサポートします。パススルークエリは、テーブル関数を使用して、実行のためにクエリ全体をデータソースにプッシュダウンします。
Db2 AS/400 でパススルークエリを使用するには、以下の構文を使用できます。
SELECT * FROM TABLE(
system.query(
query => 'query string
'
))
以下のクエリ例は、Db2 AS/400 内のデータソースにクエリをプッシュダウンします。クエリは customer
テーブル内のすべての列を選択し、結果を 10 個に制限します。
SELECT * FROM TABLE(
system.query(
query => 'SELECT * FROM customer LIMIT 10'
))
ライセンス情報
このコネクタを使用することにより、pom.xml
追加リソース
最新の JDBC ドライバーバージョンの情報については、GitHub.com で Db2 AS/400 コネクタ用の「pom.xml
このコネクタに関するその他の情報については、GitHub.com で対応するサイト