- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有这个 json 模式
{
"name":"Pete"
"age":24,
"subjects":[
{
"name":"maths"
"grade":"A"
},
{
"name":"maths"
"grade":"B"
}
]
}
我想将其提取到 pinot 表中以运行如下查询
select age,subjects_grade,count(*) from table group by age,subjects_grade
有没有办法在 pinot 工作中做到这一点?
最佳答案
Pinot有两种处理JSON记录的方式:
<强>1。在摄取时间内压平记录:在这种情况下,我们将每个嵌套字段视为一个单独的字段,因此需要:
请参阅下面如何定义 subjects_name
和 subjects_grade
列。由于它是一个数组,所以这两个字段在 Pinot 中都是多值列。
<强>2。直接提取 JSON 记录
在这种情况下,我们将每个嵌套字段视为一个单独的字段,因此需要:
jsonFormat
以将表配置中的JSON字段字符串化请参阅下面如何定义 subjects_str
列。
下面是示例表架构/配置/查询:
示例 Pinot 架构:
{
"metricFieldSpecs": [],
"dimensionFieldSpecs": [
{
"dataType": "STRING",
"name": "name"
},
{
"dataType": "LONG",
"name": "age"
},
{
"dataType": "STRING",
"name": "subjects_str"
},
{
"dataType": "STRING",
"name": "subjects_name",
"singleValueField": false
},
{
"dataType": "STRING",
"name": "subjects_grade",
"singleValueField": false
}
],
"dateTimeFieldSpecs": [],
"schemaName": "myTable"
}
示例表配置:
{
"tableName": "myTable",
"tableType": "OFFLINE",
"segmentsConfig": {
"segmentPushType": "APPEND",
"segmentAssignmentStrategy": "BalanceNumSegmentAssignmentStrategy",
"schemaName": "myTable",
"replication": "1"
},
"tenants": {},
"tableIndexConfig": {
"loadMode": "MMAP",
"invertedIndexColumns": [],
"noDictionaryColumns": [
"subjects_str"
],
"jsonIndexColumns": [
"subjects_str"
]
},
"metadata": {
"customConfigs": {}
},
"ingestionConfig": {
"batchIngestionConfig": {
"segmentIngestionType": "APPEND",
"segmentIngestionFrequency": "DAILY",
"batchConfigMaps": [],
"segmentNameSpec": {},
"pushSpec": {}
},
"transformConfigs": [
{
"columnName": "subjects_str",
"transformFunction": "jsonFormat(subjects)"
},
{
"columnName": "subjects_name",
"transformFunction": "jsonPathArray(subjects, '$.[*].name')"
},
{
"columnName": "subjects_grade",
"transformFunction": "jsonPathArray(subjects, '$.[*].grade')"
}
]
}
}
示例查询:
select age, subjects_grade, count(*) from myTable GROUP BY age, subjects_grade
select age, json_extract_scalar(subjects_str, '$.[*].grade', 'STRING') as subjects_grade, count(*) from myTable GROUP BY age, subjects_grade
比较两种方式,我们推荐解决方案1,当字段密度高时(例如每个文档都有字段name和grade,那么它是值得的将它们提取出来作为新列),它提供了更好的查询性能和更好的存储效率。
对于解决方案2,它的配置更简单,并且适用于稀疏字段(例如只有少数文档有特定字段)。它需要使用 json_extract_scalar 函数来访问嵌套字段。
另请注意 Pinot GROUP BY 在多值列上的行为。
更多引用:
关于Pinot 嵌套 json 摄取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65886253/
我有这个 json 模式 { "name":"Pete" "age":24, "subjects":[ { "name":"maths" "grade":"
测量海浪周期的变量的“单位”属性以“秒”为单位。这不是日期时间字段,但 xarray 会自动将此变量作为 timedelta64 摄取。由于单位不是“自...以来的秒数”,我会假设 xarray 应该
我尝试使用 geomesa-accumulo 摄取 geotiff 数据,但出现以下错误: WARNING: Failed to load the GDAL native libs. This is
我有一个很大的 JSON 字符串,包含 10 条记录,每条记录都有自己的属性。我需要使用 Javascript 将它们提取到我的 MongoDB 中。我对 Javascript 基本上没什么用,谷歌也
在谈到 MongoDB 时,我完全是个新手,但我以前确实有使用 Hbase 和 Accumulo 等 nosql 存储的经验。当我使用这些其他 nosql 平台时,我最终编写了自己的数据摄取框架(通常
我正在尝试为我正在开发的应用构建我自己的客户端 RTMP 库。到目前为止,一切都非常成功,因为我能够连接到 RTMP 服务器协商握手,然后发送所有必要的数据包(FCPublish Publish ET
我将 pandas 与 pandera 一起用于模式验证,但我遇到了一个问题,因为数据中有一个空整数列。 from prefect import task, Flow #type:i
我将 pandas 与 pandera 一起用于模式验证,但我遇到了一个问题,因为数据中有一个空整数列。 from prefect import task, Flow #type:i
我无法在网络服务中正确读取输入 JSON 文件。我正在尝试将一些输入参数从简单的字符串更改为字符串数组 我的输入 JSON 看起来像这样: { "inputParams" : { "speck
Snowflake 建议在摄取之前拆分大文件: To optimize the number of parallel operations for a load, we recommend aimin
我可以在linux中成功执行以下命令: ffmpeg -i "rtmp://42.62.95.48/live?vhost=hls/livestream timeout=2" -vcodec copy
您好,我需要从数据库中读取多个表并连接这些表。一旦表加入,我想将它们推送到 Elasticsearch。 这些表是从外部进程连接的,因为数据可以来自多个源。这不是问题,事实上我有 3 个单独的进程以平
如何根据 Kafka 消息中的消息类型使用水槽写入自定义 hdfs 目录? 说 kafka 消息:{"type": "A", "data": "blah"} 在类型字段中有 "A"应该写入 /data
我正在寻找一种方法,使 Google DataFlow 作业在(特定)异常发生时停止从 Pub/Sub 摄取。 来自 Pub/Sub 的事件是通过 PubsubIO.Read.Bound 读取的 JS
我运行了一个 docker-compose up,我在我的 golang 容器上收到一条错误消息,提示“Error establishing Mongo session”,然后容器退出。我不确定问题是
我是一名优秀的程序员,十分优秀!