概要
BigQueryに存在するテーブルのDDLが欲しいときってありませんか?僕はあります。
bq
コマンドでスキーマ情報を取得できますが、JSON形式だったりで微妙に欲しい物と違う。
そんなときに使えるワンライナーです
実行環境
Mac
必要なもの
- bqコマンドラインツール
- jqコマンド
-
gnu-sed
- 下記コマンドでは
alias sed='gsed'
してます
- 下記コマンドでは
コマンド
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
をもっと使いこなせるようになりたい