

# Amazon Athena Google BigQuery コネクタ
<a name="connectors-bigquery"></a>

Google [BigQuery](https://cloud.google.com/bigquery/) のために Amazon Athena コネクタを使用すると、Amazon Athena から、Google BigQuery のデータに対する SQL クエリを実行できるようになります。

このコネクタは、Glue データカタログにフェデレーティッドカタログとして登録できます。Lake Formation で定義されたデータアクセスコントロールを、カタログ、データベース、テーブル、列、行、タグレベルでサポートします。このコネクタは、Glue 接続を使用して Glue の設定プロパティを一元管理しています。

## 前提条件
<a name="connectors-bigquery-prerequisites"></a>
+ Athena コンソールまたは AWS Serverless Application Repository を使用して AWS アカウント にコネクタをデプロイします。詳細については「[データソース接続を作成する](connect-to-a-data-source.md)」または「[AWS Serverless Application Repository を使用してデータソースコネクタをデプロイする](connect-data-source-serverless-app-repo.md)」を参照してください。

## 制限事項
<a name="connectors-bigquery-limitations"></a>
+ Lambda 関数における最大タイムアウト時間は 15 分です。分割が発生するたびに BigQuery に対しクエリが実行されます。Athena が読み込む結果を保存するためには、十分な時間のクエリが必要です。Lambda 関数がタイムアウトした場合には、クエリは失敗します。
+ Google BigQuery では、大文字と小文字が区別されます。コネクタは、データセット名、テーブル名、プロジェクト ID の大文字と小文字の修正を試みます。これが必要なのは、Athena では、すべてのメタデータを小文字で扱うからです。これらの修正により、Google BigQuery への余分な呼び出しが多数発生します。
+ 二進数のデータ型はサポートされません。
+ Google BigQuery の同時実行性とクォータについての制限が原因で、コネクタにおいて、Google のクォータ制限に関する問題が発生する場合があります。このような問題を回避するには、可能な限り多くの制約 を Google BigQuery に適用します。BigQuery でのクォータの詳細については、Google BigQuery のドキュメントで「[割り当てと上限](https://cloud.google.com/bigquery/quotas)」を参照してください。

## パラメータ
<a name="connectors-bigquery-parameters"></a>

このセクションのパラメータを使用して Google BigQuery コネクタを設定します。

### Glue 接続 (推奨)
<a name="bigquery-gc"></a>

Glue 接続オブジェクトを使用して Google BigQuery コネクタを設定することをお勧めします。そのためには、Google BigQuery コネクタ Lambda の `glue_connection` 環境変数を、使用する Glue 接続の名前に設定します。

**Glue 接続プロパティ**

次のコマンドを使用して、Glue 接続オブジェクトのスキーマを取得します。このスキーマには、接続を制御するために使用できるすべてのパラメータが含まれています。

```
aws glue describe-connection-type --connection-type BIGQUERY
```

**Lambda 環境プロパティ**

**glue\$1connection** – フェデレーションコネクタに関連付けられた Glue 接続の名前を指定します。

**注記**  
Glue 接続を使用するすべてのコネクタは、認証情報を保存するために AWS Secrets Manager を使用する必要があります。
Glue 接続を使用して作成された Google BigQuery コネクタは、マルチプレックスハンドラーの使用をサポートしていません。
Glue 接続を使用して作成された Google BigQuery コネクタは、`ConnectionSchemaVersion` 2 のみをサポートします。

### レガシー接続
<a name="bigquery-legacy"></a>

**注記**  
2024 年 12 月 3 日以降に作成された Athena データソースコネクタは、AWS Glue 接続を使用します。

以下に示すパラメータ名と定義は、関連付けられた Glue 接続なしで作成された Athena データソースコネクタ用です。以下のパラメータは、Athena データソースコネクタの以前のバージョンを[手動でデプロイ](connect-data-source-serverless-app-repo.md)する場合、または `glue_connection` 環境プロパティが指定されていない場合にのみ使用します。

**Lambda 環境プロパティ**
+ **spill\$1bucket** – Lambda 関数の上限を超えたデータに対して、Amazon S3 バケットを指定します。
+ **spill\$1prefix** – (オプション) 指定された `athena-federation-spill` という `spill_bucket` の、デフォルトのサブフォルダに設定します。このロケーションで、Amazon S3 の[ストレージライフサイクル](https://docs.aws.amazon.com/AmazonS3/latest/userguide/object-lifecycle-mgmt.html)を設定し、あらかじめ決められた日数または時間数以上経過したスピルを削除することをお勧めします。
+ **spill\$1put\$1request\$1headers** – (オプション) スピリングに使用されるAmazon S3 の `putObject` リクエスト (例:`{"x-amz-server-side-encryption" : "AES256"}`) に関する、 JSON でエンコードされたリクエストヘッダーと値のマッピング。利用可能な他のヘッダーについては、「Amazon Simple Storage Service API リファレンス」の「[PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html)」を参照してください。
+ **kms\$1key\$1id** – (オプション) デフォルトでは、Amazon S3 に送信されるすべてのデータは、AES-GCM で認証された暗号化モードとランダムに生成されたキーを使用して暗号化されます。KMS が生成したより強力な暗号化キー (たとえば `a7e63k4b-8loc-40db-a2a1-4d0en2cd8331`) を Lambda 関数に使用させる場合は、KMS キー ID を指定します。
+ **disable\$1spill\$1encryption** – (オプション) `True` に設定されている場合、スピルに対する暗号化を無効にします。デフォルト値は `False` です。この場合、S3 にスピルされたデータは、AES-GCM を使用して (ランダムに生成されたキー、または KMS により生成したキーにより) 暗号化されます。スピル暗号化を無効にすると、特にスピルされる先で[サーバー側の暗号化](https://docs.aws.amazon.com/AmazonS3/latest/userguide/serv-side-encryption.html)を使用している場合に、パフォーマンスが向上します。
+ **gcp\$1project\$1id** – コネクタの読み込み対象となるデータセットを含むプロジェクト ID (プロジェクト名ではありません、例:`semiotic-primer-1234567`)。
+ **secret\$1manager\$1gcp\$1creds\$1name** – JSON 形式の BigQuery 認証情報が含まれている、AWS Secrets Manager 内のシークレットの名前 (例: `GoogleCloudPlatformCredentials`)。
+ **big\$1query\$1endpoint** — (オプション) BigQuery プライベートエンドポイントの URL。このパラメータは、プライベートエンドポイント経由で BigQuery にアクセスする場合に使用します。

## 分割とビュー
<a name="connectors-bigquery-splits-and-views"></a>

BigQuery コネクタはテーブルのクエリに BigQuery Storage Read API を使用し、BigQuery Storage API はビューをサポートしないため、コネクタはビューに単一の分割を用いる BigQuery クライアントを使用します。

## パフォーマンス
<a name="connectors-bigquery-performance"></a>

BigQuery コネクタはテーブルのクエリに BigQuery Storage Read API を使用し、この API は BigQuery マネージドストレージへの迅速なアクセスを提供する RPC ベースのプロトコルを使用します。BigQuery Storage Read API の詳細については、Google Cloud ドキュメントの「[Use the BigQuery Storage Read API to read table data](https://cloud.google.com/bigquery/docs/reference/storage)」を参照してください。

列のサブセットを選択すると、クエリランタイムが大幅に短縮され、スキャンされるデータが減ります。このコネクタは、同時実行数が増えるとクエリに失敗する可能性があり、一般に動作が遅いコネクタです。

Athena Google BigQuery コネクタは述語のプッシュダウンを実行して、クエリによってスキャンされるデータを減少させます。スキャンされるデータ量を削減し、クエリ実行のランタイムを短縮するために、`LIMIT` 句、`ORDER BY` 句、単純な述語、および複雑な式はコネクタにプッシュダウンされます。

### LIMIT 句
<a name="connectors-bigquery-performance-limit-clauses"></a>

`LIMIT N` ステートメントにより、クエリによってスキャンされるデータが削減されます。`LIMIT N` プッシュダウンを使用すると、コネクタは `N` 行のみを Athena に返します。

### 上位 N 件のクエリ
<a name="connectors-bigquery-performance-top-n-queries"></a>

上位 `N` 件のクエリは、結果セットの順序と返される行数に対する制限を指定します。このタイプのクエリを使用して、データセットの上位 `N` 個の最大値または上位 `N` 個の最小値を決定できます。上位 `N` 件のプッシュダウンを使用すると、コネクタは `N` 件の順序付けられた行のみを Athena に返します。

### 述語
<a name="connectors-bigquery-performance-predicates"></a>

述語は、ブール値に照らして評価し、複数の条件に基づいて行をフィルタリングする SQL クエリの `WHERE` 句内の式です。Athena Google BigQuery コネクタは、これらの式を組み合わせて Google BigQuery に直接プッシュすることで、機能を強化し、スキャンされるデータ量を削減できます。

次の Athena Google BigQuery コネクタ演算子は、述語のプッシュダウンをサポートしています。
+ **ブーリアン: **AND、OR、NOT
+ **等値: **EQUAL、NOT\$1EQUAL、LESS\$1THAN、LESS\$1THAN\$1OR\$1EQUAL、GREATER\$1THAN、GREATER\$1THAN\$1OR\$1EQUAL、IS\$1DISTINCT\$1FROM、NULL\$1IF、IS\$1NULL
+ **Arithmetic: **ADD、SUBTRACT、MULTIPLY、DIVIDE、MODULUS、NEGATE
+ **その他: **LIKE\$1PATTERN、IN

### 組み合わせたプッシュダウンの例
<a name="connectors-bigquery-performance-pushdown-example"></a>

クエリ機能を強化するには、次の例のようにプッシュダウンタイプを組み合わせます。

```
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%') 
ORDER BY col_a DESC 
LIMIT 10;
```

## パススルークエリ
<a name="connectors-bigquery-passthrough-queries"></a>

Google BigQuery コネクタは、[パススルークエリ](federated-query-passthrough.md)をサポートします。パススルークエリは、テーブル関数を使用して、実行のためにクエリ全体をデータソースにプッシュダウンします。

Google BigQuery でパススルークエリを使用するには、以下の構文を使用できます。

```
SELECT * FROM TABLE(
        system.query(
            query => 'query string'
        ))
```

以下のクエリ例は、Google BigQuery 内のデータソースにクエリをプッシュダウンします。クエリは `customer` テーブル内のすべての列を選択し、結果を 10 個に制限します。

```
SELECT * FROM TABLE(
        system.query(
            query => 'SELECT * FROM customer LIMIT 10'
        ))
```

## ライセンス情報
<a name="connectors-bigquery-license-information"></a>

Amazon Athena Google BigQuery コネクタプロジェクトは、[Apache-2.0 ライセンス](https://www.apache.org/licenses/LICENSE-2.0.html)の下で使用許諾されています。

このコネクタを使用することにより、[pom.xml](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-google-bigquery/pom.xml) ファイル内のリストにある、サードパーティのコンポーネントが使用されることを承認し、 GitHub.com にある [LICENSE.txt](https://github.com/awslabs/aws-athena-query-federation/blob/master/athena-google-bigquery/LICENSE.txt) ファイルに記載されている、個別のサードパーティライセンスの使用条件に同意したとみなされます。

## その他のリソース
<a name="connectors-bigquery-additional-resources"></a>

このコネクタに関するその他の情報については、GitHub.com で[対応するサイト](https://github.com/awslabs/aws-athena-query-federation/tree/master/athena-google-bigquery)を参照してください。