BigQuery не соответствует подписи при попытке отфильтровать строки на основе on списка целых чисел

#sql #google-bigquery

#sql #google-bigquery

Вопрос:

Я пытаюсь извлечь определенные строки, где код столбца соответствует одному из целых чисел в списке:

 SELECT DISTINCT *
FROM `detail_table`
WHERE Date BETWEEN '2019-03-12' AND '2019-03-15'
AND Code IN UNNEST([36516, 152])
  

Однако я получаю сообщение об ошибке:

google.api_core.исключения.BadRequest: 400 Нет совпадающей подписи для оператора В UNNEST для типов аргументов: СТРОКА, МАССИВ

Что я должен сделать, чтобы это заработало? Когда это строки, тогда это работает нормально, но я должен фильтровать по целым числам.

Комментарии:

1. Является Code строковым представлением целых чисел? Если это так, вы могли бы CAST(Code AS INT64) .

2. Код действительно является строкой, я думал, что это число, поскольку в нем были только цифры, но таблица была сохранена в виде строки… вот почему

Ответ №1:

Вместо этого используйте приведенное ниже

 #standardSQL
SELECT DISTINCT *
FROM `project.dataset.detail_table`
WHERE `date` BETWEEN '2019-03-12' AND '2019-03-15'
AND Code IN UNNEST(['36516', '152'])  
  

или

 #standardSQL
SELECT DISTINCT *
FROM `project.dataset.detail_table`
WHERE `date` BETWEEN '2019-03-12' AND '2019-03-15'
AND CAST(Code AS INT64) IN UNNEST([36516, 152])   
  

Или даже просто (зависит от вашего случая)

 #standardSQL
SELECT DISTINCT *
FROM `project.dataset.detail_table`
WHERE `date` BETWEEN '2019-03-12' AND '2019-03-15'
AND Code IN ('36516', '152')