我在 Athena 中有一个 Map string->string 类型的列,这在 AWS QuickSight 中无法识别。我正在尝试使用 SQL 将此字段转换为 QuickSight 中的 varchar
SELECT cast(body as varchar) FROM db.events;
但它失败了
Cannot cast map(varchar,varchar) to varchar
如何正确转换此字段以便 QuickSight 可以对其进行查询?
我在 Athena 中有一个 Map string->string 类型的列,这在 AWS QuickSight 中无法识别。我正在尝试使用 SQL 将此字段转换为 QuickSight 中的 varchar
SELECT cast(body as varchar) FROM db.events;
但它失败了
Cannot cast map(varchar,varchar) to varchar
如何正确转换此字段以便 QuickSight 可以对其进行查询?
我认为没有简单的方法可以做到这一点,但也许有一些解决方法。
如果每个地图有两个已知名称的键,您可以创建两个新列:
SELECT
ELEMENT_AT(map_col,'key1') AS key1_col
,ELEMENT_AT(map_col,'key2') AS key2_col
FROM
(
SELECT
MAP(
ARRAY['key1','key2'],
ARRAY['val1','val2']
) AS map_col
)
这将输出:
key1_col | key2_col |
---|---|
val1 | val2 |
如果您的地图列只有一个键,您可以调整上面的代码片段并使用它或使用这个:
SELECT
ARRAY_JOIN(MAP_KEYS(map_col), ', ') AS keys
,ARRAY_JOIN(MAP_VALUES(map_col), ', ') AS vals
FROM
(
SELECT
MAP(
ARRAY['key1'],
ARRAY['val1']
) AS map_col
)
这将导致:
钥匙 | 瓦尔斯 |
---|---|
键1 | val1 |
如上所述,没有正确的方法,如果您有很多键,您可以尝试使用第二个片段创建字符串来存储键和值,然后使用计算字段(可能使用拆分)来访问它们。
希望能帮助到你 (: