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

    Server-side GTM を Google AppEngine にデプロイする

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

  2. Google BigQuery

    Treasure DataからBigQueryにデータを移動させる方法

    こんにちは、エクスチュアの酒井です。今回は、TreasureDat…

  3. Google BigQuery

    Big QueryでWindow関数を用いて、累積和を計算する

    こんにちは。エクスチュアでインターンをさせて頂いている中野です。…

  4. Google BigQuery

    Tableau×BigQueryをコスパ良く使う方法

    こんにちは、エクスチュア渡部です。TableauでBigQue…

  5. Google BigQuery

    Google Apps Scriptを使ってスプレッドシートからBigQueryのテーブルを更新する…

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

  6. Analytics Hub

    BigQueryでもデータクリーンルームの検証

    こんちには、喜田です。エクスチュアでは顧客のSnowflak…

最近の記事

  1. 【GA4/GTM】dataLayerを使ってカスタムイベント…
  2. KARTE を使ってサイト外でも接客を
  3. 【GA4/GTM】dataLayerを活用しよう
  4. ジャーニーマップをデジタルマーケティングの視点で
  5. ChatGPT ProからClaude3 Proへ移行した話…
  1. Google Apps Script(GAS)

    Google App ScriptとGoogleスプレッドシートを連携させる
  2. セッションリプレイ

    【Tips】セッションリプレイについて
  3. IT用語集

    ビッグクエリ(Big Query)って何?
  4. データサイエンス

    IQをキッカケに理解する統計学の基礎
  5. Tableau

    Tableau Viz紹介 : 10.4新機能を使ってダッシュボードを作ってみた…
PAGE TOP