BigQueryでワンライナーでDDLを生成する
概要
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
をもっと使いこなせるようになりたい
- 下記コマンドでは
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
をもっと使いこなせるようになりたい
CREATE TABLE `fh-bigquery.wikipedia_v3.pageviews_2018` (
datehour TIMESTAMP
,wiki STRING
,title STRING
,views INT64
)
- カラム名とかによっては使えないかもしれないけど許してください
- あとパーティションとかディスクリプションには対応してません。カラムディスクリプションは1コマンド足せばできるかもしれないです(未検証)
最後に
-
jq
をもっと使いこなせるようになりたい
jq
をもっと使いこなせるようになりたいAuthor And Source
この問題について(BigQueryでワンライナーでDDLを生成する), 我々は、より多くの情報をここで見つけました https://qiita.com/ck_fm0211/items/cff5ee8de4ef0f314085著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .