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

連携クエリの構文

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

構文

SELECT * FROM EXTERNAL_QUERY(connection_id, external_database_query);
  • connection_id(文字列): データベース接続リソースの名前。ウェブ UI、CLI または API で作成します。

    接続 ID の例 projects/bigquery-federation-test/locations/us/connections/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 * EXTERNAL_QUERY(
'connection_id',
'''SELECT * FROM customers AS c ORDER BY c.customer_id'');

始める前に

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

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

サービス アカウント

BigQuery は、サービス アカウントを使用して Cloud SQL インスタンスに接続します。BigQuery Connection API を有効にすると、GCP 管理の IAM サービス アカウントが自動的に作成されます。サービス アカウントには次の権限が付与されています。

権限 説明
cloudsql.instances.connection 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 へのアクセス許可

ユーザーまたは Google グループに bigquery.admin 役割を付与するには:

Console

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

    [IAM] ページを開く

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

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

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

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

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

      管理者権限を付与する

CLI

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

プロジェクトの Cloud IAM ポリシーに単一のバインディングを追加するには、次のコマンドを入力します。ユーザーを追加するには、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/usergroup または user のいずれかです。
  • 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 での Cloud IAM 役割の詳細については、アクセス制御をご覧ください。

パブリック IP

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

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

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

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

BigQuery の IAM 役割と権限の詳細については、アクセス制御をご覧ください。

接続リソースを作成する

Console

  1. 接続リソースを作成するには、BigQuery ウェブ UI にアクセスします。

    BigQuery ウェブ UI に移動

  2. [データを追加] で、メニューから [接続を作成] を選択する

    接続リソースを作成する

  3. [接続を作成] パネルで、次の操作を行います。

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

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

      新しい接続リソース

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

コマンドライン

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

  • --connection_type
  • --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
    

ここで

  • --connection_type は常に CLOUD_SQL です。
  • --properties には、作成された接続のパラメータが JSON 形式で含まれます(例: --properties='{"param":"param_value"}')。接続リソースを作成する場合、instanceIDdatabasetype パラメータは必須です。friendly_name パラメータと description パラメータは省略可能です。
  • --connection_credential には、username パラメータと password パラメータを指定する必要があります。
  • --project_id はプロジェクト ID です。
  • --location は、Cloud SQL インスタンスが配置されているリージョンです。
  • 文字、数字、アンダースコアのみを使用して、接続を識別する名前を入力します。

たとえば、次のコマンドは、ID が federation-test の新しい接続名(わかりやすい名前: 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

projects.locations.connections.create メソッドを使用し、connection リソースのインスタンスを指定します。リファレンス ドキュメントの REST API をご覧ください。

接続リソースの表示

Console

  1. 接続リソースのステータスを表示するには、BigQuery ウェブ UI にアクセスします。

    BigQuery ウェブ UI に移動

  2. 接続リソースは、プロジェクトのすぐ下で外部接続というグループに表示されます。

  3. 接続をクリックすると、connection IDCloud SQL instance ID など、その接続リソースに関する他の情報が表示されます。

    接続リソースを表示する

コマンドライン

bq show コマンドを入力して、接続フラグ --connection を使用します。完全修飾の connection_id が必要です。

    bq show --connection project:location:connection_id

たとえば、次のコマンドを実行すると、リージョン us にある federation-test という ID のプロジェクトに、my_new_connection という新しい接続リソースが作成されます。

    bq show --connection federation-test:us.my_new_connection

API

projects.locations.connections.list メソッドを使用して、list リソースのインスタンスを指定します。リファレンス セクションの REST API をご覧ください。

別のユーザーにアクセス権を付与する

別のユーザーが Cloud SQL 連携クエリの接続リソースを使用するには、bigquery.admin ユーザーが BigQuery Connection UserIAM の次の役割を付与する必要があります。この IAM 役割には、次の権限が含まれます。

  • bigquery.connections.get
  • bigquery.connections.list
  • bigquery.connections.use
  • bigquery.connections.getIamPolicy

bigquery.admin ユーザーは、BigQuery Connection Admin という別の役割を他のユーザーに付与することもできます。この役割には、BigQuery Connection User と同じ権限に加えて、既存の接続を作成、更新、削除する追加の権限と接続に設定された IAM ポリシーが含まれます。

  • bigquery.connections.create
  • bigquery.connections.update
  • bigquery.connections.setAIMpolicy
  • bigquery.connections.delete

料金

BigQuery から Cloud SQL にクエリを実行すると、クエリで読み取られたバイト数に対して料金が発生します。詳細については、クエリの料金をご覧ください。ベータ期間中、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 文字列 接続リソースの名前。形式は、projects/{project_id}/locations/{location_id}/connections/{connection_id} です。
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 列を宣言するとき、いくつかの値を事前に定義します。その後、この列に定義済みの値のセットを挿入します STRING
GEOMETRY GEOMETRY 現時点では未対応
BIT INT64 現時点では未対応

PostgresSQL と BigQuery の型マッピング

名前 説明 BigQuery の型 型の違い
整数
smallint 2 バイト、-32768~+32767 INT64
smallserial smallint を参照 INT64
integer 4 バイト、-2147483648~+2147483647 INT64
serial integer を参照 INT64
bigint 8 バイト、-9223372036854775808~9223372036854775807 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 桁の尺度、-92233720368547758.08~+92233720368547758.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 形式) 非対応

報告されている問題と制限事項

リージョン

Cloud SQL 連携クエリは、Cloud SQL と BigQuery の両方をサポートするリージョンでのみサポートされます。クエリの連携はすべての BigQuery リージョンでサポートされますが、一部の Cloud SQL リージョンではサポートされていません。

リージョン間での連携クエリは、次のように実行できます。

マルチリージョン

BigQuery マルチリージョンでは、同じロケーション(US、EU)の Cloud SQL リージョンに対してクエリを実行できます。例:

  • BigQuery US マルチリージョンは、Cloud SQL us-central1、us-east1、us-east4、us-west1 などにクエリを実行できます。
  • BigQuery EU マルチリージョンは、Cloud SQL europe-north1、europe-west1 などにクエリを実行できます。

単一リージョン

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

  • BigQuery us-east1 は、Cloud SQL us-east1 にのみクエリを実行できます。

BigQuery と Cloud SQL は、このベータ版と同じ単一リージョンで利用できますが、一部のリージョンはサポートされていません。詳細なマッピングについては、次の表をご覧ください。

Cloud SQL リージョン BigQuery マルチリージョン / リージョン
northamerica-northeast1 US / Northamerica-northeast1
us-central 非対応: Cloud SQL インスタンスのこのリージョンは V1 です。
連携クエリは、V2 インスタンスでのみサポートされます。
us-central1 US
us-east1 US
us-east4 US / us-east4
us-west1 US
us-west2 US / us-west2
southamerica-east1 southamerica-east1
europe-north1 EU / europe-north1
europe-west1 EU
europe-west2 EU / europe-west2
europe-west3 EU
europe-west4 EU
europe-west6 EU / europe-west6
asia-east1 非対応
asia-east2 asia-east2
asia-northeast1 asia-northeast1
asia-south1 asia-south1
asia-southeast1 asia-southeast1
australia-southeast1 australia-southeast1

割り当てとその他の制限

  • パフォーマンス: 連携クエリは、BigQuery ストレージに対するクエリほど高速ではありません。BigQuery の場合、外部クエリを実行し、Cloud SQL から BigQuery にデータを一時的に移動するまで、ソース データベースが待機状態になります。通常、MySQL や PostgreSQL などのソース データベースは複雑な分析クエリ用に最適化されていません。
  • 割り当て: ユーザーは Cloud SQL でクエリ割り当てを制御する必要があります。連携クエリに追加の割り当て設定はありません。ワークロードの分離を実現するには、データベースのリードレプリカに対してのみクエリを実行することをおすすめします。
  • 課金対象の最大バイト数: 現時点で、このフィールドは連携クエリで使用できません。実際に連携クエリを実行する前に課金対象のバイト数を計算することはできません。
  • Cloud SQL インスタンスの制限: 連携クエリは、パブリック IP を使用する Cloud SQL v2 インスタンスでのみサポートされます。
  • Cloud SQL の MySQL PostgreSQL 割り当ての制限が適用されます。
  • 接続数: 連携クエリは、最大 10 までの一意の接続を使用できます。

トラブルシューティング

このセクションでは、接続の設定時によくある問題のトラブルシューティングについて説明します。考えられるすべてのエラー メッセージや問題がこのセクションに記載されているわけではありません。

一般的な問題

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

  • 接続のドキュメント ページの「始める前に」に記載されている手順をすべて完了していること。
  • 接続構成プロパティが正しく設定されていること。

接続構成が正しく、適切な権限が付与されている場合は、次の一般的な問題の解決方法をご覧ください。

問題: BigQuery と Cloud SQL が同じ場所に配置されていない。
解決策: Cloud SQL 連携クエリは、Cloud SQL と BigQuery の両方をサポートするリージョンでのみサポートされます。データセットが USEU などのマルチリージョンのロケーションにある場合、BigQuery データセットと Cloud SQL インスタンスは同じリージョンまたは同じロケーションに配置されている必要があります。リージョンの詳細については、既知の問題と制限事項をご覧ください。
問題: パフォーマンスが予想より遅い。
解決策: 連携クエリでは、外部から Cloud SQL にクエリを送信します。データを一時的な BigQuery テーブルに返し、BigQuery データタイプにマッピングしてからクエリを実行する必要があります。このため、BigQuery に保存されたデータに対するクエリほど連携クエリのパフォーマンスは高くありません。パフォーマンスはそれほど高くありませんが、連携クエリではデータのコピー、移動、保存をやり直す必要がありません。
問題: 接続名の形式を指定する方法
解決策: 接続名に project、location、connection_id を指定してください。接続名は、次のパターンに準拠している必要があります。projects/{project_id=*}/locations/{location_id=*}/connections/{connection_id=*} 例: projects/federation-test/locations/us/connections/my_new_connection

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

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

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

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

    • エラー メッセージ: Invalid table-valued function external_query Postgres type (OID = 790) is not supported now at [1:15]
    • サポートされていないデータ型: money, time with time zone, inet, path, pg_lsn, point, polygon, tsquery, tsvector, txid_snapshot, uuid, box, cidr, circle, interval, jsonb, line, lseg, macaddr, macaddr8
    • 解決策: サポートされていないデータ型を STRING 型にキャストする。
    • 例: SELECT CAST('12.34'::float8::numeric::money AS varchar(30)); このコマンドを実行すると、サポートされていないデータ型 moneystring にキャストされます。
このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

ご不明な点がありましたら、Google のサポートページをご覧ください。