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

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

新規登録して質問してみよう
ただいま回答率
85.48%
BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

Q&A

解決済

1回答

210閲覧

GASからBigQueryのデータ取得時、全件取得ができない

kesko-gt

総合スコア5

BigQuery

BigQueryは、Google Cloud Platformが提供しているビッグデータ解析サービス。数TB(テラバイト)またはPB(ペタバイト)の膨大なデータに対し、SQL風のクエリを実行し、高速で集計・分析を行うサービスです。

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

1グッド

2クリップ

投稿2024/02/02 01:37

実現したいこと

BigQueryにすでにテーブルやデータがある状態で、Google Apps Scriptを用いてそれを取得したいと思っています。

発生している問題・分からないこと

取得はできているのですが、件数が足りない、という問題が発生しています。
具体的には、
・BigQueryの件数:5917件
・GASで取得しログに出した件数:4794件
という感じです。
何度やってもこの件数になります。

エラーメッセージ

error

1(エラーになってる訳ではないので割愛します)

該当のソースコード

JavaScript

1function getBigQuery() { 2 const projectId = "my_project_id"; 3 const query = "SELECT * FROM my_project_id.my_dateset_id.my_table_id"; 4 let queryRequest = BigQuery.newQueryRequest(); 5 queryRequest.query = query; 6 const result = BigQuery.Jobs.query(queryRequest, projectId); 7 const rows = result.rows; 8 console.log(`${rows.length}`) 9}

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

Googleで検索してみましたが、似たような現象は見つけられませんでした。
そもそも何が原因でこうなっているのか分からず、BigQuery側の設定の問題かもしれないとなると、
かなり特定が難しいと思ってしまいました。
もし分かる方いらっしゃれば、よろしくお願いします。

補足

不足している情報等あればご指摘お願いいたします。

ams2020👍を押しています

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YellowGreen

2024/02/02 03:41 編集

私自身は、普段BigQueryは使いませんので、見当違いかもしれません。 リファレンスでの全件取得のコードはもう少し手順が多いようですが、 https://developers.google.com/apps-script/advanced/bigquery?hl=ja .queryメソッドでjobIdを取得してから .getQueryResultsメソッドで 戻り値にpageTokenが返されている間、 whileループで戻り値のrowを蓄積しているように思えます。
kesko-gt

2024/02/02 05:24

コメント本当にありがとうございます! おかげさまで解決することができました!
guest

回答1

0

自己解決

コメントでいただいたリファレンスの記事と、それによって起こったエラーの解決の参考にさせていただいたQiitaの記事をハイブリッドさせて、全件取得ができました!

以下コードのうちコメントアウトで追加と記したところが、リファレンスのコードにはなくQiitaを参考にして追加したものです。

Javascript

1function runQuery() { 2 const projectId = 'my_project_id'; 3 const request = { 4 query: 'SELECT * FROM my_project_id.my_dataset_id.my_table_id', 5 useLegacySql: false, 6 location: 'asia-northeast1', //追加 7 }; 8 let queryResults = BigQuery.Jobs.query(request, projectId); 9 const jobId = queryResults.jobReference.jobId; 10 11 let sleepTimeMs = 500; 12 while (!queryResults.jobComplete) { 13 Utilities.sleep(sleepTimeMs); 14 sleepTimeMs *= 2; 15 queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId); 16 } 17 18 let rows = queryResults.rows; 19 while (queryResults.pageToken) { 20 queryResults = BigQuery.Jobs.getQueryResults(projectId, jobId, { 21 pageToken: queryResults.pageToken, 22 location: queryResults.jobReference.location //追加 23 }); 24 rows = rows.concat(queryResults.rows); 25 } 26 console.log(rows.length); 27}

投稿2024/02/02 05:23

kesko-gt

総合スコア5

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問