LoginSignup
2
0

More than 3 years have passed since last update.

BigQueryでSHOW CREATE TABLE的なCREATE文を生成してみる

Last updated at Posted at 2020-10-08

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'
2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0