在bigquery中转换unicode的函数
function to convert unicode in bigquery
我在文档中的 bigquery 中尝试使用 NFKC 的 NORMALIZE 函数,我看到我可以将字符串转换为可读格式。例如
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;
& 符号正确显示,但我有一个 table,其中有一列 STRING 的值中包含 unicode 字符,但我无法使用 NORMALIZE 将其转换为可读格式.
我也尝试了一些其他的解决方案
但还没有任何效果。
附件为数据示例:
您发布了一个关于 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
)
如您所见 - 每次您获得相同的字符串时,它们只是具有不同的不可见表示。
\u2004
被称为 thick space
,这就是为什么您认为它没有正确显示的原因,因为您只看到 space -
但是,如果您将尝试一些其他代码 - 例如 20
- 您会看到它实际上正在显示,即使没有使用 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
我在文档中的 bigquery 中尝试使用 NFKC 的 NORMALIZE 函数,我看到我可以将字符串转换为可读格式。例如
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;
& 符号正确显示,但我有一个 table,其中有一列 STRING 的值中包含 unicode 字符,但我无法使用 NORMALIZE 将其转换为可读格式.
我也尝试了一些其他的解决方案
附件为数据示例:
您发布了一个关于 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
)
如您所见 - 每次您获得相同的字符串时,它们只是具有不同的不可见表示。
\u2004
被称为 thick space
,这就是为什么您认为它没有正确显示的原因,因为您只看到 space -
但是,如果您将尝试一些其他代码 - 例如 20
- 您会看到它实际上正在显示,即使没有使用 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