Cloud Dataproc

BigQueryテーブルをAVRO形式でエクスポートしてHiveで扱う

こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。

今日も普段あまり使わないであろう小ネタです。
BigQueryのテーブルをエクスポートして、Dataproc上でHiveのExternal Tableとして扱うケースがあったので、その時のメモです。

1. BigQueryのテーブルをエクスポートする

BigQueryのテーブルをCloud Storageのバケットにエクスポートします。
BigQueryのエクスポート形式としてはCSVやJSONを普段よく使いますが、

・スキーマにARRAY型を含んでいるため、CSV形式ではエクスポート出来ない。
・Dataprocクラスタ上でHive(Hive on Spark)を使ってデータを処理するというのが今回の要件。

という条件があったので、AVROフォーマットでエクスポートしました。
AVRO(アブロ)とは、スキーマ定義を持つバイナリデータで、HadoopやSparkとの親和性が高いという利点があります。

というわけで、BigQueryからテーブルをCloud Storageにエクスポートをします。
bqコマンドでエクスポートするのですが、–source_format=AVROオプションを使ってファイル形式をAVROにします。

$ bq load --replace --source_format=AVRO \
dataset_name.table_name gs://bucket_name/bigquery/*

ファイルサイズが1GB以上あると自動分割されるので、エクスポートするファイル名はアスタリスク「*」にしておきます。

しばらくするとエクスポートが完了して、バケット内に000000000000, 000000000001, というように分割ファイルが作成されました。

2. AVROファイルでHiveの外部テーブルを作成する

今度はDataprocクラスタを作成して、Hive外部テーブルを作成するジョブを登録します。

これもコマンドで実行します。

まずはクラスタの作成

$ gcloud beta dataproc --region us-west1 clusters create dataproc-cluster \
--subnet default --no-address --zone us-west1-c \
--master-machine-type n1-standard-1 --master-boot-disk-size 100 \
--num-workers 20 --worker-machine-type n1-standard-1 --worker-boot-disk-size 100 
--scopes 'https://www.googleapis.com/auth/cloud-platform' \
--project project_name

us-west1-cにworkerクラスを20台用意するのですが、IPアドレスの割当てが8個しかないので–no-addressオプションを使ってVMインスタンスはローカルIPだけ使うようにしてます。

そして次はテーブル作成ジョブの作成です。
avro_tableという名前のHive外部テーブルを作成します。

$ source ./hiveql.sh
$ gcloud dataproc jobs submit spark-sql --cluster dataproc-cluster \
--region us-west1 -e "${HIVEQL}"

上記のhiveql.shの中身はこうなってます。

HIVEQL=$(cat <<EOF
CREATE EXTERNAL TABLE avro_table
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION 'gs://bucket_name/bigquery/'
TBLPROPERTIES  (
    'avro.schema.literal'='{
      "name": "avro_table",
      "type": "record",
      "fields": [
                {"name":"id", "type":["string","null"]},
                {"name":"ary_id", "type":[{"type":"array", "items":"string"},"null"]},
                {"name":"info", "type":["string","null"]}
      ]
    }');
EOF
)

数十秒ほどして、Dataprocコンソールに Job output is complete のメッセージが出力されて

Status: Succeeded

という状態になればHive外部テーブルの作成完了です。

今回はBigQueryからAVRO形式でエクスポートしてファイルを使ってHive外部テーブルをDataprocクラスタ上に作成する方法についてでした。
弊社ではGoogle Cloud Platformを使ってビッグデータ分析基盤を構築するための支援業務を行っております。
お問合わせはこちらからどうぞ。

ブログへの記事リクエストはこちらまで

ピックアップ記事

  1. 最速で理解したい人のためのIT用語集

関連記事

  1. Google Cloud Platform

    LookerStudioを知る。

    LookerStudioを知る。 -エクスチュアのツール紹介-Goog…

  2. Google BigQuery

    BigQueryのユーザー定義関数(UDF)をTableauで使う

    こんにちは、エクスチュアの渡部です。今回はTableauでstan…

  3. Google BigQuery

    オープンソースBI「Metabase」の使い勝手が丁度良かった

    こんにちは、エクスチュアの權泳東(コン・ヨンドン)です。ほんの…

  4. Application Integration

    Google Cloud iPaaS 「Application Integration」を使ってみた…

    こんにちは、エクスチュアの黒岩です。今回の記事では、Goog…

  5. Google BigQuery

    GCP: 今月のGCP課金額をslackに自動的に書き込む

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

  6. Adobe Analytics

    Adobe Analytics: DatafeedのログからフォールアウトレポートをBigQuery…

    こんにちは、エクスチュアの權泳東(権泳東/コン・ヨンドン)です。…

最近の記事

  1. Streamlitを使った簡単なデータアプリケーション作成ガ…
  2. 生成AI機能を活かしたデータカタログ製品「Secoda」を試…
  3. 回帰分析はかく語りき Part2 重回帰分析
  4. 第14回関西DB勉強会-Snowflake Summit参加…
  5. Open Interpreter+VScode+Docker…
  1. 未分類

    ThoughtSpotとSnowflakeを使ってセルフBIの世界を体験してみた…
  2. Google Apps Script(GAS)

    Google App Scriptを特定のタイミングで自動で動かしたい
  3. Amazon Web Services

    IAM (Identity and Access Management) を理解…
  4. ObservePoint

    Webサイトのプライバシーポリシー検証(5/6):「個人情報の販売/共有禁止」リ…
  5. Python

    Python クローリング&スクレイピング
PAGE TOP