Amazon Athena Cloudera Hive コネクタ
Cloudera Hive 用の Amazon Athena コネクタを使用すると、Athena で Cloudera Hive
このコネクタは、Glue 接続を使用して Glue の設定プロパティを一元化しません。接続設定は Lambda を介して行われます。
前提条件
Athena コンソールまたは AWS Serverless Application Repository を使用して AWS アカウント にコネクタをデプロイします。詳細については、「データソース接続を作成する」または「AWS Serverless Application Repository を使用してデータソースコネクタをデプロイする」を参照してください。
このコネクタを使用する際は、先に VPC とセキュリティグループをセットアップしておきます。詳細については、「データソースコネクタまたは AWS Glue 接続用の VPC を作成する」を参照してください。
制限
-
DDL の書き込みオペレーションはサポートされていません。
-
マルチプレクサの設定では、スピルバケットとプレフィックスが、すべてのデータベースインスタンスで共有されます。
-
関連性のある Lambda 上限値。詳細については、AWS Lambda デベロッパーガイドの Lambda のクォータを参照してください。
用語
以下に、Cloudera Hive コネクタに関連する用語を示します。
-
データベースインスタンス – オンプレミス、Amazon EC2、または Amazon RDS にデプロイされたデータベースの任意のインスタンス。
-
ハンドラー – データベースインスタンスにアクセスする Lambda ハンドラー。ハンドラーには、メタデータ用とデータレコード用があります。
-
メタデータハンドラー – データベースインスタンスからメタデータを取得する Lambda ハンドラー。
-
レコードハンドラー – データベースインスタンスからデータレコードを取得する Lambda ハンドラー。
-
複合ハンドラー — データベースインスタンスからメタデータとデータレコードの両方を取得する Lambda ハンドラー。
-
プロパティまたはパラメータ – ハンドラーがデータベース情報を抽出するために使用するデータベースプロパティ。これらのプロパティは Lambda の環境変数で設定します。
-
接続文字列 – データベースインスタンスへの接続を確立するために使用されるテキスト文字列。
-
カタログ – Athena に登録された AWS Glue ではないカタログ。これは、
connection_string
プロパティに必須のプレフィックスです。 -
マルチプレックスハンドラー – 複数のデータベース接続を受け入れて使用することが可能な Lambda ハンドラー。
パラメータ
このセクションのパラメータを使用して Cloudera Hive コネクタを設定します。
接続文字列
次の形式の JDBC 接続文字列を使用して、データベースインスタンスに接続します。
hive://${
jdbc_connection_string
}
マルチプレックスハンドラーの使用
マルチプレクサーを使用すると、単一の Lambda 関数から複数のデータベースインスタンスに接続できます。各リクエストはカタログ名によりルーティングされます。Lambda では以下のクラスを使用します。
Handler | Class |
---|---|
複合ハンドラー | HiveMuxCompositeHandler |
メタデータハンドラー | HiveMuxMetadataHandler |
レコードハンドラー | HiveMuxRecordHandler |
マルチプレックスハンドラーのパラメータ
パラメータ | 説明 |
---|---|
$ |
必須。データベースインスタンスの接続文字列。環境変数には、Athena で使用されているカタログの名前をプレフィックスします。例えば、Athena に登録されたカタログが myhivecatalog の場合、環境変数の名前は myhivecatalog_connection_string になります。 |
default |
必須。デフォルトの接続文字列。この文字列は、カタログが lambda:${ AWS_LAMBDA_FUNCTION_NAME } の場合に使用されます。 |
以下に、2 つのデータベースインスタンス (デフォルト値の hive1
、および hive2
) をサポートする、Hive MUX Lambda 関数のプロパティ例を示します。
プロパティ | 値 |
---|---|
default |
hive://jdbc:hive2://hive1:10000/default?${Test/RDS/hive1} |
hive2_catalog1_connection_string |
hive://jdbc:hive2://hive1:10000/default?${Test/RDS/hive1} |
hive2_catalog2_connection_string |
hive://jdbc:hive2://hive2:10000/default?UID=sample&PWD=sample |
認証情報の提供
JDBC 接続文字列でデータベースのユーザー名とパスワードを指定するには、Cloudera Hive コネクタに AWS Secrets Manager からのシークレットが必要です。Athena フェデレーティッドクエリ機能を AWS Secrets Manager で使用するには、Secrets Manager に接続するためのインターネットアクセス
JDBC 接続文字列には、AWS Secrets Manager のシークレットの名前を含めます。コネクタは、このシークレット名を Secrets Manager の username
および password
の値に置き換えます。
シークレット名を含む接続文字列の例
次の文字列には、シークレット名 ${Test/RDS/hive1}
が含まれています。
hive://jdbc:hive2://hive1:10000/default?...&${Test/RDS/hive1}&...
次の例のように、コネクタはシークレット名を使用し、シークレットを取得してユーザー名とパスワードを提供します。
hive://jdbc:hive2://hive1:10000/default?...&UID=sample2&PWD=sample2&...
現在のところ、Cloudera Hive コネクタは、UID
および PWD
の JDBC プロパティを認識します。
単一接続ハンドラーの使用
以下の単一接続メタデータ、およびレコードハンドラーを使用すると、単一の Cloudera Hive インスタンスに接続できます。
ハンドラーのタイプ | Class |
---|---|
複合ハンドラー | HiveCompositeHandler |
メタデータハンドラー | HiveMetadataHandler |
レコードハンドラー | HiveRecordHandler |
単一接続ハンドラーのパラメータ
パラメータ | 説明 |
---|---|
default |
必須。デフォルトの接続文字列。 |
単一接続ハンドラーでは、1 つのデータベースインスタンスがサポートされます。また、default
接続文字列パラメータを指定する必要があります。他のすべての接続文字列は無視されます。
次は、Lambda 関数でサポートされている単一の Cloudera Hive インスタンス用のプロパティ例です。
プロパティ | 値 |
---|---|
デフォルト | hive://jdbc:hive2://hive1:10000/default?secret=${Test/RDS/hive1} |
スピルパラメータ
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、Cloudera Hive、および Arrow に対応させて、各データ型を示しています。
JDBC | Cloudera Hive | Arrow |
---|---|---|
ブール値 | ブール値 | Bit |
整数 | TINYINT | Tiny |
ショート | SMALLINT | Smallint |
整数 | INT | Int |
Long | BIGINT | Bigint |
フロート | float4 | Float4 |
ダブル | float8 | Float8 |
日付 | date | DateDay |
Timestamp | timestamp | DateMilli |
文字列 | VARCHAR | Varchar |
バイト | bytes | Varbinary |
BigDecimal | 10 進数 | 10 進数 |
配列 | 該当なし (注記を参照) | リスト |
注記
現在のところ、Cloudera Hive では、集計型 ARRAY
、MAP
、STRUCT
、および UNIONTYPE
はサポートされません。集計型の列は、SQL における VARCHAR
列のように扱われます。
パーティションと分割
パーティションは、コネクタを分割する方法を決定するために使用されます。Athena は varchar
型の合成列を作成し、コネクタが分割を生成できるようにするために、テーブルに対するパーティションのスキームを示します。コネクタは実際のテーブル定義を変更しません。
パフォーマンス
Cloudera Hive は静的パーティションをサポートしています。Athena Cloudera Hive コネクタは、これらのパーティションからデータを並列に取得できます。パーティション分散が一様で非常に大きなデータセットをクエリする場合は、静的パーティショニングの使用を強くお勧めします。Cloudera Hive コネクタは、同時実行によるスロットリングに強いです。
Athena Cloudera Hive コネクタは述語のプッシュダウンを実行して、クエリによってスキャンされるデータを減少させます。スキャンされるデータ量を削減し、クエリ実行のランタイムを短縮するために、LIMIT
句、単純な述語、および複雑な式はコネクタにプッシュダウンされます。
LIMIT 句
LIMIT N
ステートメントにより、クエリによってスキャンされるデータが削減されます。LIMIT N
プッシュダウンを使用すると、コネクタは N
行のみを Athena に返します。
述語
述語は、ブール値に照らして評価し、複数の条件に基づいて行をフィルタリングする SQL クエリの WHERE
句内の式です。Athena Cloudera Hive コネクタは、これらの式を組み合わせて Cloudera Hive に直接プッシュすることで、機能を強化し、スキャンされるデータ量を削減できます。
次の Athena Cloudera Hive コネクタ演算子は、述語のプッシュダウンをサポートしています。
-
ブーリアン: AND、OR、NOT
-
等値: EQUAL、NOT_EQUAL、LESS_THAN、LESS_THAN_OR_EQUAL、GREATER_THAN、GREATER_THAN_OR_EQUAL、IS_NULL
-
Arithmetic: ADD、SUBTRACT、MULTIPLY、DIVIDE、MODULUS、NEGATE
-
その他: LIKE_PATTERN、IN
組み合わせたプッシュダウンの例
クエリ機能を強化するには、次の例のようにプッシュダウンタイプを組み合わせます。
SELECT * FROM my_table WHERE col_a > 10 AND ((col_a + col_b) > (col_c % col_d)) AND (col_e IN ('val1', 'val2', 'val3') OR col_f LIKE '%pattern%') LIMIT 10;
パススルークエリ
Cloudera Hive コネクタは、パススルークエリをサポートします。パススルークエリは、テーブル関数を使用して、実行のためにクエリ全体をデータソースにプッシュダウンします。
Cloudera Hive でパススルークエリを使用するには、以下の構文を使用できます。
SELECT * FROM TABLE( system.query( query => '
query string
' ))
以下のクエリ例は、Cloudera Hive 内のデータソースにクエリをプッシュダウンします。クエリは customer
テーブル内のすべての列を選択し、結果を 10 個に制限します。
SELECT * FROM TABLE( system.query( query => 'SELECT * FROM customer LIMIT 10' ))
ライセンス情報
このコネクタを使用することにより、pom.xml
追加リソース
JDBC ドライバーの最新バージョンの情報については、GitHub.com で Cloudera Hive コネクタ用の pom.xml
このコネクタに関するその他の情報については、GitHub.com で対応するサイト