数组到带有 prestodb 的字符串
array to string with prestodb
我在 Athena 控制台中有一个 AWS Athena (parquet) 数据库 returns:
.. 来自以下查询:
SELECT id,
TYPEOF(organisations) as type,
cardinality(organisations) as len,
organisations
FROM mydb.tbl;
将完整的 table 远程读取到 Python(使用 awswrangler)失败,因为 organisations
是数组(有时长度为零)。我一直在尝试将 organisaions
字段转换为数组的字符串表示形式(或等效的 json),但到目前为止我没有尝试过。非常感谢任何建议。
如果您不关心保留 organization
和 charoffset
字段名称,您可以将数组转换为 JSON
,然后将其格式化为 varchar
json_format
:
WITH t(organizations) AS (
VALUES
ARRAY[ROW('x', 1), ROW('y', 2)],
ARRAY[ROW('a', 3), ROW('b', 4)],
ARRAY[]
)
SELECT json_format(CAST(organizations AS JSON))
FROM t
=>
_col0
-------------------
[["x",1],["y",2]]
[["a",3],["b",4]]
[]
如果您的数组元素可以转换为 varchar
,您可以使用 array_join
函数将数组转换为字符串,请参阅此处的文档
https://prestodb.io/docs/current/functions/array.html
例如:
WITH t(organizations) AS (
VALUES
ARRAY[1,2,3,4,5],
ARRAY[]
)
SELECT array_join(organizations, ',')
FROM t
如果您的数组包含更复杂的元素,您可以先使用 transform
函数将它们“自定义”转换为 varchar 并将其提供给 array_join
函数,例如:
WITH t(organisations) AS (
VALUES
ARRAY[cast(ROW('Police Scotland', 6) as ROW(organisation varchar, charoffset integer))],
ARRAY[]
)
SELECT '{' || array_join(transform(organisations, x -> '{organisation='||x.organisation||',charoffset='||cast(x.charoffset as varchar)||'}'),',') || '}'
FROM t
我在 Athena 控制台中有一个 AWS Athena (parquet) 数据库 returns:
.. 来自以下查询:
SELECT id,
TYPEOF(organisations) as type,
cardinality(organisations) as len,
organisations
FROM mydb.tbl;
将完整的 table 远程读取到 Python(使用 awswrangler)失败,因为 organisations
是数组(有时长度为零)。我一直在尝试将 organisaions
字段转换为数组的字符串表示形式(或等效的 json),但到目前为止我没有尝试过。非常感谢任何建议。
如果您不关心保留 organization
和 charoffset
字段名称,您可以将数组转换为 JSON
,然后将其格式化为 varchar
json_format
:
WITH t(organizations) AS (
VALUES
ARRAY[ROW('x', 1), ROW('y', 2)],
ARRAY[ROW('a', 3), ROW('b', 4)],
ARRAY[]
)
SELECT json_format(CAST(organizations AS JSON))
FROM t
=>
_col0
-------------------
[["x",1],["y",2]]
[["a",3],["b",4]]
[]
如果您的数组元素可以转换为 varchar
,您可以使用 array_join
函数将数组转换为字符串,请参阅此处的文档
https://prestodb.io/docs/current/functions/array.html
例如:
WITH t(organizations) AS (
VALUES
ARRAY[1,2,3,4,5],
ARRAY[]
)
SELECT array_join(organizations, ',')
FROM t
如果您的数组包含更复杂的元素,您可以先使用 transform
函数将它们“自定义”转换为 varchar 并将其提供给 array_join
函数,例如:
WITH t(organisations) AS (
VALUES
ARRAY[cast(ROW('Police Scotland', 6) as ROW(organisation varchar, charoffset integer))],
ARRAY[]
)
SELECT '{' || array_join(transform(organisations, x -> '{organisation='||x.organisation||',charoffset='||cast(x.charoffset as varchar)||'}'),',') || '}'
FROM t