質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.33%

Bigqueryにカラム数が可変のCSVをインポートする方法

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 443

okzjapan

score 3

前提・実現したいこと

  • 定期的に、カラム数が可変のCSVファイルをBigqueryに挿入したい
  • Bigquery側でスキーマを自動更新したい

発生している問題・エラーメッセージ

  • カラムが固定のCSVを挿入することはできています (構造体にマッピングしてそれをPutする)
  • 今回の場合、CSVのカラム数が可変のため、構造体をあらかじめ定義することができません

  • 例えば、次のようなデータを同じテーブルに書き込みたい
  • カラム数は可変ですが、それを事前にはわからず構造体をあらかじめ定義できないという前提です
id,name,value1,value2
1,hoge,10,20
2,hoge,20,30
id,name,value1,value2,value3
1,fuga,100,200,300
2,fuga,200,300,400

試したこと

色々と調べてみましたが、構造体にマッピングする方法しか出てこず、途方にくれています。
ヒントだけでもよいので、ご教示いただけると幸いです。
よろしくお願いします。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • nobonobo

    2019/07/30 08:25 編集

    DBメンテナンスの時にテープル定義スキーマの厳格さがその後のコストを大きく変動させます。
    僕ならカラム数が変動するものを一つのテーブルに入れたいと言われたら理由を確認したい。そうしたい理由は何でしょうか?
    また、CSVファイルの中でカラム数の変動を許容しますか?value#の個数を有限に、例えば1以上5以下に制限することは可能ですか?

    キャンセル

  • okzjapan

    2019/07/30 16:50

    ご質問ありがとうございます。

    >value#の個数を有限に、例えば1以上5以下に制限することは可能ですか?
    個数の制限はできません。

    質問の背景には、ある計測ツールのデータを、CSVを返すAPI経由でBIgqueryに毎日insertを行いたいという目的があります。
    計測ツールから返されるデータにはアプリ内で実装しているイベントの値が含まれており、このイベントの数はアプリのアップデートに応じて変動するため、カラム数が可変となります。(例におけるvalueがイベントの数だけあるイメージです)

    その意味では、例えば最初のinsertでvalue1,value2, value3があり、次にvalue2,value3,value4となった場合、value4のカラムを追加してvalue1には0またはnilを入れるという形でも問題ないという状況です。

    少々わかりづらい点があるかとは思いますが、お力添えいただけますと幸甚です。
    またご不明点あれば回答させていただきますので、よろしくお願いいたします。

    キャンセル

  • nobonobo

    2019/07/30 19:14

    テーブルのカラム定義は固定して扱うのが一般的です。
    また、ひとつのテーブルに入れるためにはカラム数の制限をなくすことは出来ません。(ほとんどのSQLデータベースはカラム数の上限が意外と少ない数で決められています)

    「カラム数を片手の指で数えられる値に制限できる」ならNULL可能な最大カラム数でテーブル定義を確定させるのが一般的です。

    もう一つのやり方は「id,name,values」という3カラムのテーブル定義にすることです。
    この場合、valuesの値の格納方法や取り出し方はアプリ側の責任で行います。

    最もおすすめの方法は、大きく変動するような可変数の値を格納しつつクエリも書きやすくするにはテーブル設計にて縦に並べ直した「values用のテーブル」を別途設けてそちらに可変個数のデータを入れ元のテーブルとリレーションを定義します。関係データベースにおける配列などのキーワードで調査してみてください。

    キャンセル

  • okzjapan

    2019/08/22 16:11

    返信遅くなり大変申し訳ございません。
    こちらBigQueryの分割テーブルという機能を用いることで目的を達成することができました。
    質問の主題に沿った回答ではnobonoboさんの回答がベストアンサーだと思いますので、こちらをコピペで良いので回答欄に記述いただけないでしょうか?ベストアンサーに設定させていただきたく存じます。
    この度は親切な回答をいただきありがとうございました。

    キャンセル

回答 2

0

最初、いったんCSVの並びに合わせたワークテーブルに取り込んでから、目的のテーブルに統合しては?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

テーブルのカラム定義は固定して扱うのが一般的です。
また、ひとつのテーブルに入れるためにはカラム数の制限をなくすことは出来ません。(ほとんどのSQLデータベースはカラム数の上限が意外と少ない数で決められています)

「カラム数を片手の指で数えられる値に制限できる」ならNULL可能な最大カラム数でテーブル定義を確定させるのが一般的です。

もう一つのやり方は「id,name,values」という3カラムのテーブル定義にすることです。
この場合、valuesの値の格納方法や取り出し方はアプリ側の責任で行います。

最もおすすめの方法は、大きく変動するような可変数の値を格納しつつクエリも書きやすくするにはテーブル設計にて縦に並べ直した「values用のテーブル」を別途設けてそちらに可変個数のデータを入れ元のテーブルとリレーションを定義します。関係データベースにおける配列などのキーワードで調査してみてください。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.33%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る