Flink-SQL:从嵌套对象中提取值
Flink-SQL: Extract values from nested objects
我正在使用 Flink SQL 并且以下方案显示了我的源数据(属于一些 Twitter 数据):
CREATE TABLE `twitter_raw` (
`entities` ROW(
`hashtags` ROW(
`text` STRING,
`indices` INT ARRAY
) ARRAY,
`urls` ROW(
`indices` INT ARRAY,
`url` STRING,
`display_url` STRING,
`expanded_url` STRING
) ARRAY,
`user_mentions` ROW(
`screen_name` STRING,
`name` STRING,
`id` BIGINT
) ARRAY
)
)
WITH (...);
我只想获取集合中的主题标签。因此,我必须将构造对象的集合 (ROW) 映射到字符串数组。
喜欢这个方案:
CREATE TABLE `twitter_raw` (
`entities` ROW(
`hashtags` STRING ARRAY,
`urls` STRING ARRAY,
`user_mentions` STRING ARRAY
)
)
WITH (...);
如何使用 Flink-SQL 实现此目的?也许是内置函数(JSON-函数?)或自己的 UDF,还是我必须编写 DataStream 作业?
提前致谢。
您可以定义一个 computed row 或一个 VIEW,然后使用点表示法提取主题标签字段。例如:
CREATE VIEW hashtags_raw (hashtags) AS
SELECT entities.hashtags AS hashtags FROM twitter_raw
SQL 命令 UNNEST
在这种情况下会有所帮助。它就像 Spark 中的 EXPLODE
。
您可以通过为 hashtags
数组中的每个主题标签创建一个新行来解决它:
SELECT hashtag, index
FROM twitter_raw
CROSS JOIN UNNEST(hashtags) AS t (hashtag, index)
我正在使用 Flink SQL 并且以下方案显示了我的源数据(属于一些 Twitter 数据):
CREATE TABLE `twitter_raw` (
`entities` ROW(
`hashtags` ROW(
`text` STRING,
`indices` INT ARRAY
) ARRAY,
`urls` ROW(
`indices` INT ARRAY,
`url` STRING,
`display_url` STRING,
`expanded_url` STRING
) ARRAY,
`user_mentions` ROW(
`screen_name` STRING,
`name` STRING,
`id` BIGINT
) ARRAY
)
)
WITH (...);
我只想获取集合中的主题标签。因此,我必须将构造对象的集合 (ROW) 映射到字符串数组。
喜欢这个方案:
CREATE TABLE `twitter_raw` (
`entities` ROW(
`hashtags` STRING ARRAY,
`urls` STRING ARRAY,
`user_mentions` STRING ARRAY
)
)
WITH (...);
如何使用 Flink-SQL 实现此目的?也许是内置函数(JSON-函数?)或自己的 UDF,还是我必须编写 DataStream 作业?
提前致谢。
您可以定义一个 computed row 或一个 VIEW,然后使用点表示法提取主题标签字段。例如:
CREATE VIEW hashtags_raw (hashtags) AS
SELECT entities.hashtags AS hashtags FROM twitter_raw
SQL 命令 UNNEST
在这种情况下会有所帮助。它就像 Spark 中的 EXPLODE
。
您可以通过为 hashtags
数组中的每个主题标签创建一个新行来解决它:
SELECT hashtag, index
FROM twitter_raw
CROSS JOIN UNNEST(hashtags) AS t (hashtag, index)