BigQueryでワンライナーでDDLを生成する


概要

BigQueryに存在するテーブルのDDLが欲しいときってありませんか?僕はあります。
bqコマンドでスキーマ情報を取得できますが、JSON形式だったりで微妙に欲しい物と違う。
そんなときに使えるワンライナーです

実行環境

Mac

必要なもの

コマンド

TABLE_NAME=fh-bigquery:wikipedia_v3.pageviews_2018; \
bq show --schema --format=prettyjson ${TABLE_NAME} \
 | jq -c -r '.[] | [.name, .type]' \
 | sed -r 's/(\[|\]|")//g' \
 | sed -e 's/,/ /g' \
 | sed -e 's/INTEGER/INT64/g' \
 | sed -e '2,$s/^/,/g' \
 | sed -e 's/^/  /g' \
 | sed -z "s/\(.*\)/CREATE TABLE \`${TABLE_NAME}\` (\n \1)\n/g" \
 | sed -e 's/:/\./g'

結果

CREATE TABLE `fh-bigquery.wikipedia_v3.pageviews_2018` (
   datehour TIMESTAMP
  ,wiki STRING
  ,title STRING
  ,views INT64
)

備考

  • カラム名とかによっては使えないかもしれないけど許してください
  • あとパーティションとかディスクリプションには対応してません。カラムディスクリプションは1コマンド足せばできるかもしれないです(未検証)

最後に

  • jqをもっと使いこなせるようになりたい