前提・実現したいこと
- 定期的に、カラム数が可変のCSVファイルをBigqueryに挿入したい
- Bigquery側でスキーマを自動更新したい
発生している問題・エラーメッセージ
- カラムが固定のCSVを挿入することはできています (構造体にマッピングしてそれをPutする)
- 今回の場合、CSVのカラム数が可変のため、構造体をあらかじめ定義することができません
例
- 例えば、次のようなデータを同じテーブルに書き込みたい
- カラム数は可変ですが、それを事前にはわからず構造体をあらかじめ定義できないという前提です
1.csv
1id,name,value1,value2 21,hoge,10,20 32,hoge,20,30
1.csv
1id,name,value1,value2,value3 21,fuga,100,200,300 32,fuga,200,300,400
試したこと
色々と調べてみましたが、構造体にマッピングする方法しか出てこず、途方にくれています。
ヒントだけでもよいので、ご教示いただけると幸いです。
よろしくお願いします。
DBメンテナンスの時にテープル定義スキーマの厳格さがその後のコストを大きく変動させます。
僕ならカラム数が変動するものを一つのテーブルに入れたいと言われたら理由を確認したい。そうしたい理由は何でしょうか?
また、CSVファイルの中でカラム数の変動を許容しますか?value#の個数を有限に、例えば1以上5以下に制限することは可能ですか?
ご質問ありがとうございます。
>value#の個数を有限に、例えば1以上5以下に制限することは可能ですか?
個数の制限はできません。
質問の背景には、ある計測ツールのデータを、CSVを返すAPI経由でBIgqueryに毎日insertを行いたいという目的があります。
計測ツールから返されるデータにはアプリ内で実装しているイベントの値が含まれており、このイベントの数はアプリのアップデートに応じて変動するため、カラム数が可変となります。(例におけるvalueがイベントの数だけあるイメージです)
その意味では、例えば最初のinsertでvalue1,value2, value3があり、次にvalue2,value3,value4となった場合、value4のカラムを追加してvalue1には0またはnilを入れるという形でも問題ないという状況です。
少々わかりづらい点があるかとは思いますが、お力添えいただけますと幸甚です。
またご不明点あれば回答させていただきますので、よろしくお願いいたします。
テーブルのカラム定義は固定して扱うのが一般的です。
また、ひとつのテーブルに入れるためにはカラム数の制限をなくすことは出来ません。(ほとんどのSQLデータベースはカラム数の上限が意外と少ない数で決められています)
「カラム数を片手の指で数えられる値に制限できる」ならNULL可能な最大カラム数でテーブル定義を確定させるのが一般的です。
もう一つのやり方は「id,name,values」という3カラムのテーブル定義にすることです。
この場合、valuesの値の格納方法や取り出し方はアプリ側の責任で行います。
最もおすすめの方法は、大きく変動するような可変数の値を格納しつつクエリも書きやすくするにはテーブル設計にて縦に並べ直した「values用のテーブル」を別途設けてそちらに可変個数のデータを入れ元のテーブルとリレーションを定義します。関係データベースにおける配列などのキーワードで調査してみてください。
返信遅くなり大変申し訳ございません。
こちらBigQueryの分割テーブルという機能を用いることで目的を達成することができました。
質問の主題に沿った回答ではnobonoboさんの回答がベストアンサーだと思いますので、こちらをコピペで良いので回答欄に記述いただけないでしょうか?ベストアンサーに設定させていただきたく存じます。
この度は親切な回答をいただきありがとうございました。
回答2件
あなたの回答
tips
プレビュー