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

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

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

  2. Google Analytics

    Google Analytics StandardのデータをBigQueryで分析するための力技

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

  3. Google BigQuery

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

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

  4. Google BigQuery

    GoogleNext 2019レポート:3日目

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

  5. Adobe Analytics

    BigQuery: テーブルに格納されたURL文字列をKey-ValueのSTRUCT型で抽出する

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

  6. GitHub Actions

    GitHub ActionsでGCEへのデプロイを楽にしてみた

    はじめに今回はgithub actionsを導入する…

カテゴリ

最近の記事

  1. ChainlitでのOAuth認証にスコープを追加する方法
  2. Snowflake無料トライアルの始め方
  3. TROCCO入門
  4. コンポーザブルCDPにおけるSnowflakeのマルチモーダ…
  5. boxMCPサーバーを使ってみた
  1. Google Cloud Platform

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

    Tableau Serverの基礎をまとめてみた
  3. IT用語集

    ハードウェア(Hardware)、ソフトウェア(Software)って何?
  4. Mouseflow

    【新機能】カスタムダッシュボード:重要な指標すべてを一つの画面で
  5. Google Analytics

    Google Analytics フィルタ②
PAGE TOP