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 BigQuery

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

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

  2. Firebase Analytics

    Firebase Analyticsの新しいBigQueryスキーマを試す

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

  3. Google Analytics

    Server-side GTMのGAビーコンログをBigQueryにエクスポートして分解する

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

  4. Cloud Dataflow

    データアナリスト/データエンジニア向けNext19まとめ

    こんにちは、エクスチュア渡部です。2019/4/9-4/11に行わ…

  5. Adobe Analytics

    AdobeAnalytics Datafeed: BigQueryのSIGN関数を使った小ワザ

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

  6. Google Cloud Platform

    Vertex AIのベクトル検索によってブログの検索エンジンを作成してみた

    はじめにこんにちは、石原と申します。こちらの記事は前…

最近の記事

  1. KARTE を使ってサイト外でも接客を
  2. 【GA4/GTM】dataLayerを活用しよう
  3. ジャーニーマップをデジタルマーケティングの視点で
  4. ChatGPT ProからClaude3 Proへ移行した話…
  5. その分析、やり方あってる?記述統計と推測統計の違い
  1. Adobe Analytics

    Launchにおける検証環境の確認方法
  2. Azure

    Google Cloud StorageとAzure Blob Storage間…
  3. Adobe Analytics

    BigQuery: テーブルに格納されたURL文字列をKey-ValueのSTR…
  4. 海外情報

    【TC19ブログ】Tableau Conference 2019 3日目レポート…
  5. Adobe Analytics

    Adobe Analytics:ワークスペース:セグメント比較機能の紹介
PAGE TOP