функция для конвертации юникода в bigquery - PullRequest
0 голосов
/ 08 ноября 2018

Я опробовал функцию NORMALIZE с NFKC в большом запросе из документации. Я вижу, что могу преобразовать строку в читаемый формат. Например

WITH EquivalentNames AS (
  SELECT name
  FROM UNNEST([
      'Jane\u2004Doe',
      '\u0026 Hello'
      ]) AS name
)
SELECT
  NORMALIZE(name, NFKC) AS normalized_str
FROM EquivalentNames
GROUP BY 1;

Символ амперсанда отображается правильно, но у меня есть таблица со столбцом STRING с символом Юникод в его значениях, но я не могу использовать NORMALIZE для преобразования его в читаемый формат.

Я также попробовал некоторые другие представленные решения. Расшифровка Unicode на локальный язык в Bigquery , но пока ничего не работает.

В приложении приведен пример данных: enter image description here

Ответы [ 2 ]

0 голосов
/ 09 ноября 2018

\u2004 называется thick space, поэтому вы думаете, что он не отображается правильно, потому что вы просто видите пространство - Но если вы попробуете некоторые другие коды - например, \2020 - вы увидите, что он действительно отображается даже без дополнительной обработки с помощью функции NORMALIZE

Как показано ниже

#standardSQL
WITH EquivalentNames AS (
  SELECT name
  FROM UNNEST([
      'Jane\u2020Doe',
      '\u0026 Hello'
      ]) AS name
)
SELECT
  name, NORMALIZE(name, NFKC) AS normalized_str
FROM EquivalentNames
GROUP BY 1

с результатом

Row name        normalized_str   
1   Jane†Doe    Jane†Doe     
2   & Hello     & Hello  
0 голосов
/ 09 ноября 2018

Вы опубликовали вопрос о NORMALIZE, но не определили свои цели.

Здесь я отвечу на вопрос о NORMALIZE - чтобы указать, что он, вероятно, не делает того, чего вы ожидаете. Но, по крайней мере, он действует, как и ожидалось.

Есть много способов кодировать одну и ту же строку с помощью Unicode. Normalize выбирает один, сохраняя строку.

См. Этот запрос:

SELECT *, a=b ab, a=c ac, a=d ad, b=c bc, b=d bd, c=d cd
FROM (
  SELECT NORMALIZE('hello ñá ?', NFC) a
   , NORMALIZE('hello ñá ?', NFKC) b
   , NORMALIZE('hello ñá ?', NFD) c
   , NORMALIZE('hello ñá ?', NFKD) d
)

enter image description here

Как видите - каждый раз, когда вы получаете одну и ту же строку, они просто имеют разные невидимые представления.

...