🫥
BigQueryのクエリ実行時に発生する「Parameter types must be provided」のエラー解決方法
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
}
});
しかし、このコードでは、パラメータcompanyName
やadminUserUid
の型情報が明示されていないため、値が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