S3 BigLakeでエクスポートを試してみる

2023.05.19

はじめに

データアナリティクス事業本部のkobayashiです。

前回BigQueryの外部接続を使ってAmazon S3上のデータをBigQuery上にテーブルとして作成してみました。今回は前回の外部テーブルの環境を使ってS3をソースとする外部テーブルに対してクエリを実行して、その実行結果を再びS3にファイルとして作成したいと思います。

クエリ結果を Amazon S3 にエクスポートする  |  BigQuery  |  Google Cloud

前回の記事

外部テーブルへのクエリ結果を Amazon S3 にエクスポートする

S3をソースとする外部テーブルのクエリ結果はEXPORT DATAステートメントを使って簡単にS3上に出力することができます。

実行するには以下のリソースが必要ですが、外部接続を作成してあり外部テーブルを作成している状態でしたらすでに整っているはずです。

  • Amazon S3 バケットにアクセスするための外部接続
  • Amazon S3 BigLake テーブル
  • 正しい Amazon Web Services(AWS)の Identity and Access Management(IAM)ポリシー

では早速以下のSQLを実行してエクスポートを試してみます。

export_s3.sql

EXPORT DATA WITH CONNECTION `aws-us-east-1`.ssd_s3_biglake
OPTIONS(uri="s3://{バケット名}/export/*",
   format='CSV',        -- ファイルフォーマットを指定。CSV, JSON, AVROが選択可能
   overwrite=true,      -- ファイルが存在していた場合の上書き有無。未指定の場合はfalse
   header=true,         -- ヘッダ行の有無。未指定の場合はfalse
   field_delimiter=','  -- 区切り文字を文字列として指定
)
AS 
SELECT
  *
FROM
  s3_biglake_test.major_results_2020
WHERE
  pref_cd < 10;

上記のSQLを実行するとs3://{バケット名}/export/000000000000にクエリ結果が出力されます。

上記のクエリですが、最初は外部接続のリージョンのaws-us-east-1をバッククォートで囲わずに実行したためSyntax error: Expected keyword AS but got "-" at [1:32]のエラーが出ました。必ずバッククォートで囲むようにしましょう。

まとめ

BigQueryの外部テーブルの環境を使ってS3をソースとする外部テーブルに対してクエリを実行して、その実行結果を再びS3にファイルとして作成しました。S3上のファイルを加工するだけにもBigQueryは使える便利なサービスです。

最後まで読んで頂いてありがとうございました。