Cloud Dataproc

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

こんにちは、エクスチュアCTOの権です。

今日も普段あまり使わないであろう小ネタです。
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. GA 360 Suite

    BigQuery: Google Analytics 360のネストされたデータをフラット変換するS…

    こんにちは、エクスチュアCTOの権です。今回はGA360のBi…

  2. Cloud Dataflow

    Firebase AnalyticsのデータをフラットなCSVに変換する – Googl…

    こんにちは。エクスチュアCTOの権です。以前Firebas…

  3. Google BigQuery

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

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

  4. Adobe Analytics

    Adobe Analytics: DatafeedのログからパスフローレポートをBigQueryで作…

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

  5. Adobe Analytics

    Adobe Analyticsに入り切らないデータをBigQueryに投入する

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

  6. Adobe Analytics

    Adobe Analytics: データフィードをBigQueryで集計する

    こんにちは、エクスチュアCTOの権です。前回のブログで、Ado…

最近の記事

  1. AA + GA : SafariのITP2.1に備えてphp…
  2. Tableau:分かりやすいLOD – EXCL…
  3. Tableau:スペース区切りで複数検索が出来る検索ボックス…
  4. Google Analytics 360 + BigQuer…
  5. Looker: 公開されているLookML Blockをクロ…
  1. Adobe Analytics

    AA + GA : SafariのITP2.1に備えてphpでクッキーを永続化す…
  2. Looker

    Looker: 公開されているLookML Blockをクローンして使う方法
  3. Adobe Analytics

    AdobeAnalyticsでReactNativeアプリを計測する
  4. Adobe Analytics

    Adobe AnalyticsからDWHレポートをGoogle Cloud St…
  5. Adobe Analytics

    Adobe Analytics: レガシーs_code.jsのリミッターを解除し…
PAGE TOP