#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)