Сопоставление BigQuery

#google-bigquery

# #google-bigquery

Вопрос:

Как я могу установить порядок сопоставления в BigQuery?

Я хочу что-то вроде этого

 SELECT Place
FROM Locations
ORDER BY Place COLLATE "en_CA"
 

Я не могу найти никакой документации, кроме COLLATE — это зарезервированное слово в BigQuery.

BigQuery сортирует следующие строки в порядке [a..zA ..Z]:

Например.

  • муравей
  • пчелиный
  • cat
  • Apple
  • Банан
  • Дыня

Есть ли способ попросить BigQuery выполнить сортировку в порядке [aA..zZ]?

  • муравей
  • Apple
  • пчелиный
  • Банан
  • cat
  • Дыня

Ответ №1:

Приведенный ниже пример предназначен для стандартного SQL BigQuery

 #standardSQL
create temp function collate_order(text string) as ((
  select string_agg(chr(1000 * ascii(lower(c)) - ascii(c)), '' order by offset)
  from unnest(split(text)) c with offset
));
with `project.dataset.Locations` as (
  select 'ant' as Place union all
  select 'Apple' union all
  select 'bee' union all
  select 'apple' union all
  select 'cat' union all
  select 'Banana' union all
  select 'Cantaloupe' 
)
select Place
from `project.dataset.Locations`
order by collate_order(Place)
 

с выводом

введите описание изображения здесь

Забыл упомянуть — очевидно, вы можете расширить этот подход для обработки текста в юникоде, заменив ascii на unicode function

Ответ №2:

Вы можете попробовать следующий запрос, он будет работать в соответствии с вашими требованиями, он будет сортировать данные в порядке [aA ..zZ] :-

 SELECT Place
FROM Locations
ORDER BY upper(Place)