Cloud SQL 連携クエリ

このページでは、連携クエリを使用して BigQuery と Cloud SQL のデータにクエリを実行する方法について説明します。

概要

多くの場合、データは複数の場所に分散しています。たとえば、Cloud SQL で販売テーブルを保存し、BigQuery で顧客テーブルを保存している場合もあります。また、こうした 2 つのテーブルを 1 つのクエリで結合したい場合もあります。

BigQuery Cloud SQL 連携機能を使用すると、データのコピーや移動を行わずに、BigQuery からクエリを実行し、Cloud SQL に存在するデータをリアルタイムで取得できます。この機能は、Cloud SQL で MySQL(第 2 世代)と PostgreSQL インスタンスの両方をサポートします。

最初に 1 回だけ設定を行う必要がありますが、その後は、新しい SQL 関数の EXTERNAL_QUERY() を使用してクエリを作成できます。

ワークフロー

  • クエリを実行する Cloud SQL インスタンスを含む Google Cloud プロジェクトを選択します。
  • bigquery.admin ユーザーが BigQuery で接続リソースを作成します
  • 管理ユーザーが、ユーザー B に接続リソースの使用権限を付与します。
    • 管理者とユーザー B が同一人物の場合は、権限を付与する必要はありません。
  • ユーザー B が BigQuery で新しい EXTERNAL_QUERY() 関数を使用してクエリを作成します。

連携クエリの構文

連携クエリでは EXTERNAL_QUERY という新しい関数を使用します。

構文

    SELECT * FROM EXTERNAL_QUERY(connection_id, external_database_query);
  • connection_id(文字列): データベース接続リソースの名前です。これは BigQuery ウェブ UI、bq コマンドライン ツール、または BigQuery API で作成します。

    接続 ID の例 bigquery-federation-test.us.test-mysql

  • external_database_query(文字列): 外部データベースの SQL 言語(MySQL または PostgreSQL)の読み取り専用クエリ。クエリは Cloud SQL の外部データベースで実行されます。

説明

EXTERNAL_QUERY は、Cloud SQL でクエリを実行し、結果を一時テーブルとして返します。ソース データベース(MySQL または PostgreSQL)のデータ型は、次のデータ型マッピングで説明するように、一時結果テーブルで BigQuery データ型に変換されます。EXTERNAL_QUERY 関数は通常、FROM 句で使用されます。この関数は、BigQuery 標準 SQL でのみ使用できます。

戻り値の型

BigQuery テーブル。

クエリの例

概要で説明したような環境で、顧客ごとに最初の注文日をレポートに記載する必要があるとします。このデータは現在 BigQuery にはありませんが、Cloud SQL で稼働している PostgreSQL データベースにあります。この目的を達成するために、次の連携クエリを使用します。

SELECT c.customer_id, c.name, SUM(t.amount) AS total_revenue,
rq.first_order_date
FROM customers AS c
INNER JOIN transaction_fact AS t ON c.customer_id = t.customer_id
LEFT OUTER JOIN EXTERNAL_QUERY(
  'connection_id',
  '''SELECT customer_id, MIN(order_date) AS first_order_date
  FROM orders
  GROUP BY customer_id''') AS rq ON rq.customer_id = c.customer_id
GROUP BY c.customer_id, c.name, rq.first_order_date;

このサンプルクエリは 3 つの部分から構成されています。

  1. 稼働中の PostgreSQL データベースで外部クエリ SELECT customer_id, MIN(order_date) AS first_order_date FROM orders GROUP BY customer_id を実行し、EXTERNAL_QUERY() 関数によって各顧客の最初の注文日を取得します。
  2. 外部クエリの結果テーブルと BigQuery の顧客テーブルを customer_id で結合します。
  3. 顧客情報と最初の注文日を選択します。

順序は考慮されない

外部クエリに ORDER BY が含まれていても、EXTERNAL_QUERY() は外部クエリの結果で順序を考慮しません。次のサンプルクエリでは、Cloud SQL に格納されている顧客 ID で行の並べ替えを行っていますが、BigQuery ではその順序で結果行が出力されていません。

SELECT * FROM EXTERNAL_QUERY(
'connection_id',
'''SELECT * FROM customers AS c ORDER BY c.customer_id'');

始める前に

BigQuery 接続サービスを有効にする

  1. API ライブラリの BigQuery Connection API ページを開きます。
  2. プルダウン メニューから、Cloud SQL インスタンスを含むプロジェクトを選択します。
  3. [有効にする] ボタンをクリックします。

    BigQuery Connection API

サービス アカウント

BigQuery は、サービス アカウントを使用して Cloud SQL インスタンスに接続します。BigQuery Connection API を有効にすると、Google Cloud 管理の Identity and Access Management(IAM)サービス アカウントが自動的に作成されます。サービス アカウントには次のロールがあります。

役割 説明
cloudsql.client Cloud SQL インスタンスに接続する
logging.logWriter cloud-logging に書き込む
metrics.metricWriter cloud-monitoring に書き込む

権限

  • 接続リソースを作成して維持するには、事前定義の bigquery.admin IAM 役割が必要です。

  • bigquery.admin 役割には、次の BigQuery 接続サービスの権限が含まれます。

    • bigquery.connections.create
    • bigquery.connections.get
    • bigquery.connections.list
    • bigquery.connections.update
    • bigquery.connections.use
    • bigquery.connections.delete

Cloud SQL クエリで接続リソースを使用できるように権限を別のユーザーに付与する場合は、別のユーザーへの権限の付与をご覧ください。

bigquery.admin アクセス権の付与

bigquery.admin 役割を付与するには次の手順に従います。

Console

  1. Cloud Console で IAM ページを開きます。

    [IAM] ページを開く

  2. [プロジェクトを選択] をクリックします。

  3. プロジェクトを選択して [開く] をクリックします。

  4. [追加] をクリックしてプロジェクトに新しいメンバーを追加し、権限を設定します。

  5. [メンバーの追加] ダイアログで、次の操作を行います。

    • [メンバー] で、ユーザーまたはグループのメールアドレスを入力します。
    • [役割を選択] プルダウンで [BigQuery] > [BigQuery 管理者] の順にクリックします。
    • [追加] をクリックします。

      管理者権限を付与する

gcloud

gcloud コマンドライン ツールを使用して、ユーザーまたはグループに bigquery.admin ロールを付与できます。

プロジェクトの IAM ポリシーにバインドを 1 つ追加するには、次のコマンドを入力します。ユーザーを追加するには、フォーマット user:user@example.com--member フラグを指定します。グループを追加するには、フォーマット group:group@example.com--member フラグを指定します。

gcloud projects add-iam-policy-binding project_id \
--member group/user:address \
--role roles/bigquery.admin

ここで

  • project_id はプロジェクト ID です。
  • group/usergroupuser のどちらかです。
  • address はユーザーまたはグループのメールアドレスです。

例:

gcloud projects add-iam-policy-binding myproject \
--member group:group@example.com \
--role roles/bigquery.admin

このコマンドでは、更新したポリシーが出力されます。

    bindings:
    - members:
      - group:group@example.com
        role: roles/bigquery.admin
    

BigQuery での IAM のロールと権限について詳しくは、事前定義されたロールと権限をご覧ください。

パブリック IP

BigQuery Cloud SQL 連携機能は、パブリック IP で接続可能な Cloud SQL インスタンスでのみサポートされます。 Cloud SQL インスタンスのパブリック IP 接続を構成してください。

Cloud SQL データベース接続の設定

連携クエリでデータベースの認証情報をクリアテキストとして書き込まないようにするには、BigQuery でデータベースごとにデータベース接続リソースを作成して、連携クエリで接続リソースを参照するようにします。

接続リソースには、他のユーザーに付与できる一連の IAM 権限があります。接続リソースは暗号化され、BigQuery 接続サービスに安全に保存されます。このリソースは連携クエリにのみ使用できます。

BigQuery での IAM のロールと権限について詳しくは、事前定義されたロールと権限をご覧ください。

接続リソースを作成する

Console

  1. 接続リソースを作成するには、Cloud Console で BigQuery ウェブ UI に移動します。

    Cloud Console に移動

  2. [データを追加] メニューで [外部データソース] を選択します。

    接続リソースを作成する

  3. [外部データソース] ペインで、次の情報を入力します。

    • [接続タイプ] で、MySQL または Postgres を選択します。
    • [接続 ID] に、接続リソースの識別子を入力します。文字、数字、アンダースコアを使用できます。
    • [接続ロケーション] で、Cloud SQL インスタンス リージョンと互換性のある BigQuery ロケーション(またはリージョン)を選択します。
    • (省略可): [わかりやすい名前] に、わかりやすい接続名を入力します(例: My connection resource)。後で修正が必要になった場合、わかりやすい名前だと接続リソースを簡単に識別できます。
    • (省略可): [説明] に、この接続リソースの説明を入力します。
    • [Cloud SQL インスタンス ID] には、Cloud SQL インスタンスのフルネームを、通常は project-id:location-id:instance-id の形式で入力します。インスタンス ID は、クエリを実行する Cloud SQL インスタンスの詳細ページで見つけることができます。
    • [データベース名] に、データベースの名前を入力します。
    • [ユーザー名] に、データベースのユーザー名を入力します。
    • [パスワード] に、データベースのパスワードを入力します。

      • (省略可)パスワードを表示するには、[パスワードを表示する] をオンにします。

      新しい接続リソース

  4. [接続の作成] をクリックします。

bq

bq mk コマンドを入力して、接続フラグ --connection を指定します。次のフラグも必要です。

  • --connection_type
    • --connection_type は常に CLOUD_SQL です
  • --properties
  • --connection_credential
  • --project_id
  • --location
  • 接続の名前。文字、数字、アンダースコアのみを使用して、接続を識別する名前を入力します。

    bq mk --connection --connection_type='CLOUD_SQL' --properties=PROPERTIES --connection_credential=CREDENTIALS --project_id=PROJECT_ID --location=LOCATION new_connection
    

次のように置き換えます。

  • PROPERTIES: JSON 形式で作成された接続のパラメータ(例: --properties='{"param":"param_value"}')。接続リソースを作成するには、instanceIDdatabasetype パラメータを指定する必要があります。パラメータ friendly_namedescription は省略可能です。
  • CREDENTIALS: パラメータ usernamepassword です。
  • PROJECT_ID: プロジェクト ID。
  • LOCATION: Cloud SQL インスタンスが配置されているリージョンです。

たとえば、次のコマンドを実行すると、ID federation-testの付いたプロジェクトに my_new_connection(わかりやすい名前: 「My new connection」)という名前の接続リソースが新規に作成されます。

bq mk --connection --connection_type='CLOUD_SQL' --properties='{"instanceId":"federation-test:us-central1:mytestsql","database":"mydatabase","type":"MYSQL"}' --connection_credential='{"username":"myusername", "password":"mypassword"}' --project_id=federation-test --location=us my_new_connection

API

BigQuery Connection API では、ConnectionService 内で CreateConnection を呼び出して接続をインスタンス化できます。詳しくは、クライアント ライブラリのページをご覧ください。

トラブルシューティング

このセクションは、新しい接続を設定するときに発生する可能性がある問題のトラブルシューティングに役立ちます。考えられるすべてのエラー メッセージや問題がこのセクションに記載されているわけではありません。

一般的な接続の問題を診断する場合は、次の点を確認してください。

  • 始める前にセクションの手順がすべて完了していること。
  • 接続構成プロパティが正しく設定されていること。
  • 接続を作成する適切な権限があること。

接続プロパティが正しく、適切な権限が付与されている場合は、以下の一般的な問題の解決方法を参照してください。

問題: BigQuery と Cloud SQL が同じ場所に配置されていない。
解決策: Cloud SQL 連携クエリは、Cloud SQL と BigQuery の両方をサポートするリージョンでのみサポートされます。BigQuery データセットと Cloud SQL インスタンスは同じリージョンにある必要があります。または、BigQuery データセットは、Cloud SQL リージョンと互換性のある、同じ地理的エリアの USEU などのマルチリージョンのロケーションにある必要があります。リージョンとリージョンの互換性の詳細については、サポート対象のリージョンを参照してください。
問題: 新しく作成した接続がプロジェクトに表示されない。
解決策: BigQuery ウェブ UI に新しい接続が表示されるまで少し時間がかかることがあります。別のプロジェクトに切り替えて、30 秒ほど待ってから元に戻します。新しい接続が表示されるはずです。
問題: パフォーマンスが予想より遅い。
解決策: 連携クエリでは、外部から Cloud SQL にクエリを送信します。データを一時的な BigQuery テーブルに返し、BigQuery データタイプにマッピングしてからクエリを実行する必要があります。このため、BigQuery に保存されたデータに対するクエリほど連携クエリのパフォーマンスは高くありません。パフォーマンスはそれほど高くありませんが、連携クエリではデータのコピー、移動、保存をやり直す必要がありません。
問題: 接続名の形式を指定する方法。
解決策: 接続名にプロジェクト、ロケーション、接続 ID を指定してください。接続 ID は次のパターンに準拠している必要があります。project_id.location_id.connection_id 例: federation-test.us.my_new_connection

接続リソースの管理

接続リソースの表示、一覧表示、共有、更新、削除については、接続の操作をご覧ください。

監査ログ

接続リソースの監査ログについては、BigQuery 監査ログの概要をご覧ください。

サポート対象のリージョン

Cloud SQL 連携クエリは、Cloud SQL と BigQuery の両方をサポートするリージョンでのみサポートされます。

ロケーションまたはリージョンのタイプ

ロケーションには、2 つの種類があります。

  • リージョンは、ロンドンなどの特定の地理的な場所となります。

  • マルチリージョンは、米国などの、2 つ以上の地理的な場所を含む広い地理的なエリアとなります。

次のルールに従って接続を作成し、リージョン間で連携クエリを実行できます。

マルチリージョン

BigQuery マルチリージョンは、同じ大規模な地理的領域(米国、EU)内の任意の Cloud SQL リージョンにクエリを実行できます。次に例を示します。

  • BigQuery US マルチリージョンは、us-central1us-east4us-west2 など、米国内の任意の Cloud SQL シングル リージョンに対してクエリを実行できます。
  • BigQuery EU マルチリージョンは、europe-north1europe-west3 など、EU の加盟国にある任意の Cloud SQL シングル リージョンに対してクエリを実行できます。

クエリ処理ロケーションはマルチリージョン ロケーション(US または EU)です。

リージョンとマルチリージョンの詳細については、データセットのロケーションのページをご覧ください。

単一リージョン

BigQuery の単一リージョンは、同じリージョン内の Cloud SQL にのみクエリを実行できます。例:

  • BigQuery の単一リージョン us-east4 は、us-east4 の Cloud SQL にのみクエリを実行できます。

この例では、クエリ処理ロケーションは BigQuery の単一リージョンです。

各プロダクトでサポートされているリージョンの詳細については、次の表をご覧ください。

リージョンのロケーション

リージョンの説明 Cloud SQL リージョン 互換性のある BigQuery リージョン 互換性のある BigQuery マルチリージョン
南北アメリカ
アイオワ us-central 非対応: Cloud SQL インスタンスのこのリージョンは V1 です。
連携クエリでは、Cloud SQL の V2 インスタンスのみがサポートされます。
アイオワ us-central1 非対応 US
ラスベガス us-west4 us-west4 US
ロサンゼルス us-west2 us-west2 US
モントリオール northamerica-northeast1 northamerica-northeast1 US
北バージニア us-east4 us-east4 US
オレゴン us-west1 us-west1 US
ソルトレイクシティ us-west3 us-west3 US
サンパウロ southamerica-east1 southamerica-east1
サウスカロライナ us-east1 us-east1 US
ヨーロッパ
ベルギー europe-west1 europe-west1 EU
フィンランド europe-north1 europe-north1 EU
フランクフルト europe-west3 europe-west3 EU
ロンドン europe-west2 europe-west2 EU
オランダ europe-west4 europe-west4 EU
チューリッヒ europe-west6 europe-west6 EU
アジア太平洋
香港 asia-east2 asia-east2
ジャカルタ asia-southeast2 asia-southeast2
ムンバイ asia-south1 asia-south1
大阪 asia-northeast2 asia-northeast2
ソウル asia-northeast3 asia-northeast3
シンガポール asia-southeast1 asia-southeast1
シドニー australia-southeast1 australia-southeast1
台湾 asia-east1 asia-east1
東京 asia-northeast1 asia-northeast1

マルチリージョンのロケーション

Cloud SQL インスタンスではマルチリージョンのロケーションは使用できません。Cloud SQL マルチリージョンは連携クエリには使用できません。

EU マルチリージョン内のデータは europe-west2(ロンドン)や europe-west6(チューリッヒ)のデータセンターには保存されません。

制限事項

Cloud SQL インスタンスの上限

連携クエリは、(プライベート IP ではなく)パブリック IP を使用する Cloud SQL V2 インスタンスでのみサポートされます。

パフォーマンス

連携クエリは、BigQuery ストレージのみをクエリするほど高速ではない可能性があります。BigQuery の場合、外部クエリを実行し、Cloud SQL から BigQuery にデータを一時的に移動するまで、ソース データベースが待機状態になります。通常、MySQL や PostgreSQL などのソース データベースは複雑な分析クエリ用に最適化されていません。

外部クエリは読み取り専用

ソース データベースで実行される外部クエリは読み取り専用である必要があります。したがって、DML ステートメントと DDL ステートメントはサポートされていません。

サポートされていないデータ型

BigQuery でサポートされていないデータ型が外部クエリに含まれている場合、クエリはすぐに失敗します。サポートされていないデータ型は、サポートされている別の MySQL や PostgreSQL データ型にキャストできます。

  • サポートされていない MySQL データ型

    • エラー メッセージ: Invalid table-valued function external_query Found unsupported MySQL type in BigQuery at [1:15]
    • サポートされていない型: GEOMETRYBIT
    • 解決策: サポートされていないデータ型を STRING 型にキャストする。
    • 例: SELECT ST_AsText(ST_GeomFromText('POINT(1 1)')); このコマンドを実行すると、サポートされていないデータ型 GEOMETRYSTRING にキャストされます。
  • サポートされていない PostgreSQL データ型

    • エラー メッセージ: Invalid table-valued function external_query Postgres type (OID = 790) is not supported now at [1:15]
    • サポートされていない型: moneytime with time zoneinetpathpg_lsnpointpolygontsquerytsvectortxid_snapshotuuidboxcidrcircleintervaljsonblinelsegmacaddrmacaddr8
    • 解決策: サポートされていないデータ型を STRING 型にキャストする。
    • 例: SELECT CAST('12.34'::float8::numeric::money AS varchar(30)); このコマンドを実行すると、サポートされていないデータ型 moneySTRING にキャストされます。

割り当てと上限

  • クロスリージョンの連携クエリ: BigQuery のクエリ処理ロケーションと Cloud SQL インスタンスのロケーションが異なる場合、クロスリージョンのクエリになります。プロジェクトごとに 1 日あたり 1 TB までクロス リージョンのクエリを実行できます。
    • クロスリージョンのクエリの例を次に示します。
      • Cloud SQL インスタンスは us-west1 にありますが、BigQuery 接続は US マルチリージョンを基点にしています。BigQuery のクエリ処理ロケーションは US です。
  • 割り当て: ユーザーは Cloud SQL でクエリ割り当てを制御する必要があります。連携クエリに追加の割り当て設定はありません。ワークロードの分離を実現するには、データベースのリードレプリカに対してのみクエリを実行することをおすすめします。
  • 課金対象の最大バイト数: 現時点で、このフィールドは連携クエリで使用できません。実際に連携クエリを実行する前に課金対象のバイト数を計算することはできません。
  • Cloud SQL の MySQLPostgreSQL の割り当てと上限が適用されます。
  • 接続数: 連携クエリは、最大 10 の一意の接続を使用できます。

料金

BigQuery から Cloud SQL にクエリを実行すると、クエリで読み取られたバイト数に対して料金が発生します。詳細については、クエリの料金をご覧ください。

リファレンス

Cloud SQL テーブル スキーマを表示する

EXTERNAL_QUERY() 関数を使用して information_schema テーブルにクエリを実行すると、データベース内のすべてのテーブルの一覧など、データベースのメタデータを取得できます。また、テーブルのスキーマを表示することもできます。次の information_schema クエリの例は MySQL と PostgreSQL の両方で機能します。詳しくは、MySQL information_schema テーブルおよび PostgreSQL information_schema テーブルをご覧ください。

-- List all tables in a database.
SELECT * FROM EXTERNAL_QUERY("connection_id",
"select * from information_schema.tables;");
-- List all columns in a table.
SELECT * FROM EXTERNAL_QUERY("connection_id",
"select * from information_schema.columns where table_name='x';");

接続リソースの詳細

プロパティ名 説明
name 文字列 接続リソースの名前。形式は、project_id.location_id.connection_id です。
location 文字列 接続のロケーション。これは Cloud SQL インスタンスのロケーションと同じです。ただし例外として Cloud SQL us-central1 は BigQuery US にマップし、Cloud SQL europe-west1 は BigQuery EU にマップします。
friendlyName 文字列 接続のわかりやすい表示名
description 文字列 接続の説明
cloudSql.type 文字列 POSTGRES または MYSQL のいずれか。
cloudSql.instanceId 文字列 Cloud SQL インスタンスの名前。通常、次の形式で指定します。

Project-id:location-id:instance-id

インスタンス ID は、Cloud SQL インスタンスの詳細ページにあります。
cloudSql.database 文字列 接続先の Cloud SQL データベース。

接続認証情報リソースの詳細

プロパティ名 説明
username 文字列 データベース ユーザー名
password 文字列 データベース パスワード

データ型マッピング

Cloud SQL の連携クエリを実行すると、Cloud SQL のデータ(MySQL または PostgreSQL のデータ型)は BigQuery の標準 SQL 型に変換されます。以下は MySQL から BigQuery へと PostgreSQL から BigQuery へのデータ型のマッピングになります。

マッピングについて、次の点に注意してください。

  • decimaltimestamptime などのいくつかの例外を除き、ほとんどの MySQL データ型は同じ BigQuery データ型に対応します。
  • PostgreSQL は、moneypathuuidboxer など、BigQuery でサポートされていない非標準のデータ型を多数サポートしています。
  • BigQuery の数値範囲は、MySQL や PostgreSQL よりも小さくなります。

エラー処理

BigQuery でサポートされていないデータ型が外部クエリに含まれている場合、クエリはすぐに失敗します。サポートされていないデータ型は、サポートされている別の MySQL / PostgreSQL データ型にキャストできます。キャスト方法の詳細については、トラブルシューティングサポートされていないデータ型をご覧ください。

MySQL から BigQuery への型マッピング

MySQL タイプ MySQL の説明 BigQuery の型 型の違い
整数
INT 4 バイト、2^32 - 1 INT64
TINYINT 1 バイト、2^8 - 1 INT64
SMALLINT 2 バイト、2^16 - 1 INT64
MEDIUMINT 3 バイト、2^24 - 1 INT64
BIGINT 8 バイト、2^64 - 1 INT64
UNSIGNED BIGINT 8 バイト、2^64 - 1 NUMERIC
正確な数値
DECIMAL (M,D) 小数は(M,D)で表します。M は桁数の合計、D は小数点以下の桁数です。
M <= 65
NUMERIC

BigQuery の NUMERIC の範囲は小さく、10 進 38 桁の精度と 10 進 9 桁の尺度のみをサポートしています。
近似値
FLOAT (M,D) 4 バイト、M <= 23 FLOAT64
DOUBLE (M,D) 8 バイト、M <= 53 FLOAT64
日時
TIMESTAMP '1970-01-01 00:00:01'UTC~'2038-01-19 03:14:07' UTC TIMESTAMP ユーザーが BigQuery を呼び出した場所に関係なく、MySQL TIMESTAMP は UTC タイムゾーンとして取得されます。
DATETIME '1000-01-01 00:00:00'~'9999-12-31 23:59:59' DATETIME
DATE '1000-01-01'~'9999-12-31'. DATE
TIME 'HH:MM:SS'形式の時間
'-838:59:59'~'838:59:59'。
TIME
BigQuery の TIME 範囲は小さく、00:00:00~23:59:59 の範囲です。
YEAR INT64
文字と文字列
ENUM 使用可能な値のリストから選択された値を持つ文字列オブジェクト。 STRING
CHAR (M) 1~255 文字の固定長の文字列。 STRING
VARCHAR (M) 1~255 文字の可変長の文字列。 STRING
TEXT 最大 65,535 文字までのフィールド。 STRING
TINYTEXT 最大 255 文字までの TEXT 列。 STRING
MEDIUMTEXT 最大 16,777,215 文字までの TEXT 列。 STRING
LONGTEXT 最大 4,294,967,295 文字までの TEXT 列。 STRING
バイナリ
BLOB 最大 65,535 文字までのバイナリ ラージ オブジェクト。 BYTE
MEDIUM_BLOB 最大 16,777,215 文字までの BLOB。 BYTE
LONG_BLOB 最大 4,294,967,295 文字までの BLOB。 BYTE
TINY_BLOB 最大 255 文字までの BLOB。 BYTE
その他
SET SET 列を宣言するとき、いくつかの値を事前に定義します。その後、INSERT を使用して、この列に定義済みの値のセットを追加します。 STRING
GEOMETRY GEOMETRY 現時点では未対応
BIT INT64 現時点では未対応

PostgreSQL と BigQuery の型マッピング

名前 説明 BigQuery の型 型の違い
整数
smallint 2 バイト、-32,768~+32,767。 INT64
smallserial smallint を参照。 INT64
integer 4 バイト、-2,147,483,648~+2,147,483,647。 INT64
serial integer を参照。 INT64
bigint 8 バイト、-9,223,372,036,854,775,808~9,223,372,036,854,775,807。 INT64
bigserial bigint を参照。 INT64
正確な数値
numeric [ (p, s) ] 最大 1,000 までの精度。 NUMERIC BigQuery の NUMERIC の範囲は小さく、10 進 38 桁の精度と 10 進 9 桁の尺度のみをサポートしています。
Decimal [ (p, s) ] numeric を参照。 NUMERIC numeric を参照。
money 8 バイト、2 桁の尺度、-92,233,720,368,547,758.08~+92,233,720,368,547,758.07 非対応
近似値
real 4 バイト、単精度浮動小数点数。 FLOAT64
double precision 8 バイト、倍精度浮動小数点数。 FLOAT64
日時
date カレンダーの日付(年、月、日)。 DATE
time [ (p) ] [ without time zone ] 時刻(タイムゾーンなし)。 TIME
time [ (p) ] with time zone 時刻(タイムゾーンあり)。 非対応
timestamp [ (p) ] [ without time zone ] 日付と時刻(タイムゾーンなし)。 DATETIME
timestamp [ (p) ] with time zone 日付と時刻(タイムゾーンあり)。 TIMESTAMP ユーザーが BigQuery を呼び出す場所に関係なく、PostgreSQL の TIMESTAMP は UTC タイムゾーンとして取得されます。
interval 期間 非対応
文字と文字列
character [ (n) ] 固定長の文字列。 STRING
character varying [ (n) ] 可変長の文字列。 STRING
text 可変長の文字列。 STRING
バイナリ
bytea バイナリデータ(バイト配列)。 BYTES
bit [ (n) ] 固定長のビット列。 BYTES
bit varying [ (n) ] 可変長のビット列。 BYTES
その他
boolean 論理ブール値(true / false)。 BOOL
inet IPv4 または IPv6 ホストアドレス。 非対応
path 平面上の幾何学的なパス。 非対応
pg_lsn PostgreSQL ログシーケンス番号。 非対応
point 平面上の幾何学的な点。 非対応
polygon 平面上の閉じた幾何学的パス。 非対応
tsquery テキスト検索クエリ。 非対応
tsvector テキスト検索文書。 非対応
txid_snapshot ユーザーレベルの取引 ID のスナップショット。 非対応
uuid ユニバーサルに一意な識別子。 非対応
xml XML データ。 STRING
box 平面上の矩形のボックス。 非対応
cidr IPv4 または IPv6 ネットワーク アドレス。 非対応
circle 平面上の円。 非対応
interval [ fields ] [ (p) ] 期間。 非対応
json テキスト JSON データ。 STRING
jsonb バイナリ JSON データ、分解。 非対応
line 平面上の無限の線。 非対応
lseg 平面上の線分。 非対応
macaddr MAC(Media Access Control)アドレス。 非対応
macaddr8 MAC(Media Access Control)アドレス(EUI-64 形式)。 非対応