下面的配置由官网说明翻译过来:
Table Config
示例表配置和描述
下面显示了一个示例表配置,其中的子节被重新排序。这些小节将在下面的小节中分别进行描述。功能特定文档的进一步链接到可用的地方。
tableName : 应该只包含字母数字字符、连字符(' - ')或下划线(' _ ')。虽然使用双下划线(' __ ')是不允许的,并保留在Pinot的其他功能。
tableType : 指示表的类型。每种类型都有一些特定的设置。这将在下文每一分节解释时加以澄清。
允许值
OFFLINE : 脱机表用于存放可能定期上传的数据——每日、每周等。有关脱机表的更多信息
REALTIME : realtime表用于使用来自传入数据流的数据,并以接近实时的方式提供这些数据。
表配置格式如下
{
"tableName": "myPinotTable",
"tableType": "REALTIME"
"segmentsConfig": {...},
"tableIndexConfig": {...},
"tenants": {...},
"routing": {...},
"task": {...},
"metadata": {...}
}
需要一些部分,否则pinot-controller将拒绝表配置。所需的部分是:
tableName
tabletype
"segmentsConfig": {...}
"tableIndexConfig": {...}
"tenants": {...}
"metadata": {...}
对于实时表,streamConfig部分是必需的。
Segments Config Section
segmentsConfig节有关于配置以下信息:
Segment 保留参数 retentionTimeUnit和 retentionTimeValue ,保留只适用于表类型为APPEND
允许值:
retentionTimeUnit - DAYS
retentionTimeValue - 正整数
segmentPushFrequency 以指示片段上传的频率, REALTIME类型的表忽略
允许值: daily, hourly
segmentPushType: 指的是推到表的类型。对于实时类型的表忽略。
允许值:
APPEND:意味着新的数据将被推入并追加到表中的当前数据中,所有的实时表必须被明确设置为追加。
REFRESH: 将刷新表中包含的整个数据集。 Segment保持在设置为REFRESH时被忽略。
replication: 表中数据的副本数,用于类型为离线表和类型为REALIME 的表。当stream.<consumername>.consumer.type被设置为 HighLevel(参见StreamConfigs部分)
允许值: 正整数
replicasPerPartition : 使用表的单个流数据分区的副本数量,用于类型为REALTIME的表。<consumername>.consumer。type设置为 LowLevel (见StreamConfigs部分)
允许的值-正整数
Time列—使用timeColumnName和timeType,它必须与前面的模式中配置的内容匹配。这是一个特殊的列,Pinot使用它来管理保留(删除旧段)、混合表中实时表和离线表之间的分割查询等。
允许的值——字符串,它必须与模式中的timeFieldSpec部分匹配
Segment分配策略-详细描述自定义Pinot页面
Table Index Config Section(索引配置部分)
tableIndexConfig部分有关于如何配置的信息如下:
invertedIndexColumns : 指示要为其创建反向索引的架构中指定的实列名列表。更多关于索引的信息可以在索引技术页面找到。
允许的值-字符串;字符串必须与对应模式中的列名匹配
noDictionaryColumns : 指示模式中指定的实列名列表。当前的列名不会创建字典。更多关于索引的信息可以在索引技术页面找到。
允许的值-字符串;字符串必须与对应模式中的列名匹配
sortedColumn: 指示模式中指定的实列名列表。应该根据提供的列名对数据进行排序。只需要为实时表设置此字段。对于离线,如果源数据已排序,我们将自动创建一个已排序的索引。更多关于索引的信息可以在索引技术页面找到。
允许的值-字符串;字符串必须与对应模式中的列名匹配
aggregateMetrics: 切换到聚合度量特性。此功能将在使用时聚合实时流数据(如适用),以减少段大小。我们对具有相同维列值的所有行的度量列值求和,并在所有这些行的实时段中创建一行。此功能仅在实时表中可用。
允许的值——true启用,false禁用。
segmentPartitionConfig : 配置数据分区策略。有关此特点的更多文档可以在数据分区策略一节中找到。
loadMode—指示将如何在pinot-server上加载数据。可以配置“MMAP”或“HEAP”。
允许的值:
MMAP -配置pinot-server将数据段加载到堆外内存。
HEAP -配置pinot-server,将数据直接加载到直接内存中。
streamConfigs 此部分是仅针对REALTIME表的大部分设置的所在位置。看到StreamConfigs节
"tableIndexConfig": {
"invertedIndexColumns": [],
"noDictionaryColumns" : [],
"sortedColumn": [
"nameOfSortedColumn"
],
"noDictionaryColumns": [
"nameOfNoDictionaryColumn"
],
"aggregateMetrics": "true",
"segmentPartitionConfig": {
"columnPartitionMap": {
"contentId": {
"functionName": "murmur",
"numPartitions": 32
}
}
},
"loadMode": "MMAP",
"lazyLoad": "false",
"segmentFormatVersion": "v3",
"streamConfigs": {}
},
Tenants Section
tenants部分有两个主要的配置字段。这些字段用于配置哪些 tenants 在Helix中使用。
"tenants": {
"broker": "brokerTenantName",
"server": "serverTenantName"
},
在上面的例子中
在Helix中被标记为brokerTenantName_BROKER的代理将为该表提供服务。
表的离线段将驻留在标记为serverTenantName_OFFLINE的pinot服务器中
实时段(消耗的和完成的)将托管在标记为serverTeantName_REALTIME的pinot服务器中。
您还可以在 tenants 部分下面添加一个tagOverrideConfig部分。目前,唯一允许的覆盖是为消费和完成的片段添加额外的标记。例如:
"tenants": {
"broker": "brokerTenantName",
"server": "serverTenantName",
"tagOverrideConfig" : {
"realtimeConsuming" : "serverTenantName_REALTIME"
"realtimeCompleted" : "serverTenantName_OFFLINE"
}
}
在上面的例子中,消费段仍然会被分配给serverTenantName_REALTIME主机,但是一旦完成,这些段将被移动到serverTeantnName_OFFLINE。可以在本节中指定任何标记的全名(例如,您可以决定此表的完整段应该在标记为allTables_COMPLETED的pinot服务器中)。
有关使用和完成段的详细信息,请参阅摄取实时数据部分。
Routing Section
路由部分包含关于如何使用哪些routingTableBuilder以及如何将特定的选项传递给该生成器的配置。路由策略部分有更多信息。
"routing": {
"routingTableBuilderName": "PartitionAwareRealtime",
"routingTableBuilderOptions": {}
},
Metadata Section
元数据部分用于将特殊的键-值对传递到Pinot中,Pinot将与表配置一起存储在Pinot中。更多信息在自定义配置部分。
"metadata": {
"customConfigs": {
"specialConfig": "testValue",
"anotherSpecialConfig": "value"
}
}
StreamConfigs Section(流式配置部分)
此部分特定于REALTIME类型的表,如果表类型为其他类型,则忽略此部分。有关实时数据摄取的概述,请参阅有关实时数据摄取的部分。
以下是关于streamConfigs部分的一个小例子:
"streamConfigs" : {
"realtime.segment.flush.threshold.size": "0",
"realtime.segment.flush.threshold.time": "24h",
"realtime.segment.flush.desired.size": "150M",
"streamType": "kafka",
"stream.kafka.consumer.type": "LowLevel",
"stream.kafka.topic.name": "ClickStream",
"stream.kafka.consumer.prop.auto.offset.reset" : "largest"
}
streamType字段是强制性的。在本例中,它被设置为kafka。kafka的StreamType在Pinot中得到了本地支持。您可以使用默认的解码器类和消费者工厂类。Pinot允许您将其他流类型与它们自己的消费者工厂和解码器类一起使用(或者,如果您的安装以不同的方式格式化kafka消息,甚至可以使用kafka的其他解码器和消费者工厂)。
如果您正在考虑添加对Kafka以外的流的支持,请参阅可插流一节。
有些配置对所有流类型都是通用的,有些配置则是特定于流类型的。
Configuration generic to all stream types(对所有流类型通用的配置)
realtime.segment.flush.threshold.size: 在持久化消费段之前要消费的最大行数
注意,在上面的例子中,它被设置为0。在本例中,Pinot使用real .segment.flush.desire .size值自动计算行限制。如果消费者类型为HighLevel,则此值为每个消费段的最大值。如果消费者类型是低级别的,那么这个值将被托管在任何一个pinot-server上的所有消费者分配。
默认是5000000。
realtime.segment.flush.threshold.time: 在此之后应该持久化消费 segment 的最大运行时间。
该值可以设置为人类可读的字符串,如“1d”、“4h30m”等。应该设置此值,使其不低于底层流中的消息保留,但又不太长,以免导致服务器耗尽内存。
默认是“6 h”
realtime.segment.flush.desired.size:
完成 segments的期望大小。
仅当 consumer type设置为 LowLevel时,才支持此设置。该值可以设置为可读的字符串,如“150M”或“1.1G”等。此值在realtime.segment.flush.threshold时使用。大小设置为0。Pinot学习并估计需要使用的行数,以便持久化的 segment 大约是这个大小。学习阶段首先将行数设置为100,000(可以根据 realtime.segment.flush.autotune.initialRows设置进行更改) 并增加到所需的 segment 大小。在学习阶段, Segment 的大小可能会超过期望的大小。随着时间的推移,Pinot修正了估计,因此不能保证最终完成的段的大小与配置的完全一致。您应该设置此值以优化查询的性能(即既不太小也不太大)
默认 "200M"
realtime.segment.flush.autotune.initialRows:
学习的初始行数。
此值仅在realtime.segment.flush.threshold时使用。大小设置为o 0,消费者类型为低级。参见上面的realtime.segment.flush.desired.size。
默认的“100 k”
Configuration specific to stream types
所有这些配置项都有前缀流。<streamType>。在上面的例子中,前缀是stream.kafka。
stream.kafka.consumer.type: 这个值应该是低级别(推荐)或高级别。
请确保按照前面在表配置中描述的那样正确设置 replicasPerPartition 的值。
stream.kafka.topic.name: 要从中消费的主题的名称。
stream.kafka.consumer.prop.auto.offset。指示从流中的何处开始消耗。
如果消费者类型是 LowLevel,则仅在首次供应表时使用此配置。在高级消费者类型中,它还将在新服务器卷入或现有服务器被新服务器替换时使用。您可以指定最小或最大的值,如果您的流支持它,甚至可以指定3d。如果指定最大,则消耗将从数据流中最近的事件开始。这是创建新表的推荐方法。
如果指定最小值,则消耗将从数据流中可访问的最早事件开始。
预期底层流将使用所有以streamtype为前缀的配置。因此,可以使用前缀流设置Kafka配置页面中描述的任何配置。kafka应该注意这一点。