Summary
- https://qiita.com/ck_fm0211/items/cff5ee8de4ef0f314085
- ^ こちらにインスパイアされて、そういえば、
INFORMATION_SCHEMA.COLUMNS
があったので、文字列連結すればできそう、と思ってやってみました。 - MySQLのSHOW CREATE TABLE みたいなやつですね。
SQL
v こんな感じです
-
target_table_name
と project名とdataset名は適当に変えてください。 -
column_name != "_PARTITIONTIME"
の部分も PARTITION の有無で変わります。
DECLARE target_table_name STRING;
set target_table_name = "foo_table";
select
CONCAT(
CONCAT("create table `", target_table_name ,"` { \n"),
STRING_AGG(CONCAT(" ", column_name, " ", data_type), ",\n"),
"\n}"
)
from
`foo_project.foo_dataset`.INFORMATION_SCHEMA.COLUMNS
where
table_name = target_table_name
and
column_name != "_PARTITIONTIME"
;
結果はこんな感じ
create table `foo_table` {
id STRING,
time INT64
}
余談
- UDFにするといいかもですね。
- とはいえ、多くのユースケースでは、
bq show
&bq mk
で事足りるかと思います
bq show \
--schema \
--format=prettyjson \
foo_project:foo_dataset.foo_table > foo_table_schema.json
bq mk 'foo_project:foo_dataset.foo_table'