🫥

BigQueryのクエリ実行時に発生する「Parameter types must be provided」のエラー解決方法

2024/11/17に公開

Google BigQueryを使った開発をしていると、以下のようなエラーに遭遇することがあります。


"ERROR","message":"Error: Parameter types must be provided for null values via the 'types' field in query options.

このエラーは、BigQueryでクエリを実行する際、パラメータの型が明確に指定されていない場合に発生します。

この記事では、このエラーの原因と、その解決方法を解説します。

使用環境

この記事の内容は以下の環境で検証されています。

  • Node.js: 18
  • @google-cloud/bigquery: 7.9.0
  • TypeScript: 4.7.3

エラー背景

BigQueryは、SQLクエリにプレースホルダーとしてパラメータを使用できます。例えば、以下のようなクエリを考えます。


UPDATE `project.dataset.table`
SET company_name = @companyName
WHERE admin_user_uid = @adminUserUid

このクエリをNode.jsから実行する際に、以下のコードを使うことがあります。


await bigquery.query({
  query: updateQuery,
  params: {
    companyName: companyName, // 新しい会社名
    adminUserUid: adminUserUid // 更新対象のユーザーID
  }
});

しかし、このコードでは、パラメータcompanyNameadminUserUidの型情報が明示されていないため、値がnullだった場合に型を推測できず、エラーが発生します。

解決方法

このエラーを回避するためには、クエリオプションにtypesフィールドを追加し、各パラメータの型を明示的に指定する必要があります。

修正後のコード例は以下の通りです。


await bigquery.query({
  query: updateQuery,
  params: {
    companyName: companyName, // 新しい会社名
    adminUserUid: adminUserUid // 更新対象のユーザーID
  },
  types: {
    companyName: 'STRING',
    adminUserUid: 'STRING'
  }
});

このようにすることで、BigQueryはcompanyNameおよびadminUserUidが文字列型であることを明示的に認識でき、エラーが解消されます。

まとめ

BigQueryをNode.jsで操作する際、パラメータ型の指定は非常に重要です。特に、null 値が混在する可能性がある場合には、エラーを防ぐためにtypesフィールドを積極的に活用しましょう。

この記事を通して、同じ問題に直面しているエンジニアの助けになれば幸いです。

Discussion