新しいことにはウェルカム

技術 | 電子工作 | ガジェット | ゲーム のメモ書き

Google BigQueryのNode.js SDKで、Cloud Storageの複数のファイルをまとめてロードする方法

Google BigQueryに、Google Cloud Storageのファイルをロードする時、複数のファイルをまとめてロードすることができます。

しかし、それをGoogle BigQueryのNode.js SDKでやろうとしてハマったので、そのメモ書きです。

概要および問題点

  • table.createLoadJob()を使ってロードします。
  • ファイルは1番目の引数に、Cloud StorageのFileオブジェクトを指定します
  • ファイルが1つだけの場合、Fileオブジェクトを1つだけ渡します
  • ファイルが複数の場合、Fileオブジェクトの配列を渡します

しかし、TypeScriptの型定義では、ファイルが1つの場合しか書かれていないため、そのままFileの配列を渡すとエラーになってしまいます。

手順

キャストでFileの配列をanyにしてエラーがでないようにして渡します。

Googleのサンプルを修正すると、下記のような形になります。

await table.createLoadJob(
    (
        [
            storage.bucket('institutions').file('2011.csv'),
            storage.bucket('institutions').file('2012.csv')
        ]
    as any)
);

感想など

ドキュメントにはFileオブジェクトは1つとあるのですが、サンプルには複数オブジェクトを渡す例がありました。

ソースを見ると、1ファイルorファイル配列の、どちらでも大丈夫なようにで書かれているのですが、型定義で1つしか設定されていないため、そのままではコンパイルで弾かれてしまいます。

ファイル1つづつロードすることも可能なのですが、BigQueryは1日のロード回数に上限があるので、大量のファイルがある場合はまとめて上げたく、それができないと辛いです。