下面文章为官网翻译:
Pinot模式由一些列组成,这些列可以归类为维度、度量或时间。
Dimensions——组织数据的列。例如, accountId, country, industry等。这些列用于分割数据,通常出现在查询中的 selection、 filter和 group-by部分。
Metrics- 表示指标的测量的一些列。例如,numClicks, pageViews,等等。这些列通常出现在查询的聚合部分,例如,select sum(pageViews) from…
Time- 时间列表示数据的时间戳。模式中只有一个时间列,通常出现在查询中的 filter和 group-by部分中。
一个简单的schema即
{
"schemaName": "flights",
"dimensionFieldSpecs": [
{
"name": "flightNumber",
"dataType": "LONG"
},
{
"name": "tags",
"dataType": "STRING",
"singleValueField": false,
"defaultNullValue": "null"
}
],
"metricFieldSpecs": [
{
"name": "price",
"dataType": "DOUBLE",
"defaultNullValue": 0
}
],
"timeFieldSpec": {
"incomingGranularitySpec": {
"name": "secondsSinceEpoch",
"dataType": "INT",
"timeFormat" : "EPOCH",
"timeType": "SECONDS"
},
"outgoingGranularitySpec": {
"name": "messageTimeHours",
"dataType": "INT",
"timeFormat" : "EPOCH",
"timeType": "DAYS"
}
}}
每个Pinot模式都有一个用于标识它的名称。例如,在conig表中通过名称指定表的模式。
模式中的每一列都使用fieldSpec进行描述,fieldSpec捕获列的各种属性,如名称、数据类型等。一个模式可能包含一个描述所有维度列的维度规范数组、描述所有度量列的metricFieldSpecs和描述时间列的timeFieldSpec。
上面的schema示例有两个维度:类型Long的flightNumber和类型String的标记。维度列支持的数据类型有:
INT
FLOAT
LONG
DOUBLE
STRING
BYTES
维度列还有一个名为singlevaluedfile的可选属性,默认值为true。此属性描述列是否可以接受一行的单个值或多个值。在上面的示例中,维度标记是多值的。 这意味着它可以对特定行有多个值,比如tag1、tag2、tag3。对于多值列,单独的行不一定需要具有相同数量的值。这方面的典型用例是一个列,如skillSet for a person(表中的一行),它可以有多个值,如房地产、抵押贷款。
模式中的列price是一个度量列,因为可以在其中查询平均值、最小值、最大值等聚合,而且通常是单值的。公制列可以有以下数据类型:
INT
FLOAT
LONG
DOUBLE
BYTES
公制列通常是数值型的。但是,注意字节是度量列允许的数据类型。这通常用于HLL、TDigest等特殊表示的情况,其中列实际存储了值的字节序列化版本。
上面的模式还包含一个timeFieldSpec,用于指定时间列的属性:
incomingGranularitySpec: 指定输入到Pinot的数据中出现的时间戳的名称、数据类型和时间类型。
outgoingGranularitySpec: 指定要存储在Pinot中的时间戳的名称、数据类型和时间类型。
在本例中,以秒为单位指定的输入时间戳将 在存储到Pinot之前自动转换为天。timeFieldSpec还有一个可选属性timeFormat,它可以接受EPOCH(默认值)和SIMPLE_DATE_FORMAT:
时间列对于附加(增量数据推送)用例是必需的,但是对于刷新(每次推送数据刷新)用例是可选的。更多的细节可以在配置部分找到。
Pinot本身不存储空值,因此空值存储为fieldspec中指定的占位符值,或系统选择的默认值。在上面的模式示例中,列flight的输入中的所有空值都被转换为字符串“null”并在内部存储。同样,列price的输入中的空值被转换为整数0并存储在内部。由于这是一个可选字段,如果未指定,系统将按如下方式选择默认空值:
Dimensions: 数值字段的默认空值为MIN_VALUE (e。g整数。MIN_VALUE,翻倍。MIN_VALUE等),如果没有在字段规范中指定,则字符串字段将获得默认的空值字符串“null”。
Metrics: 如果没有在字段规范中指定,所有指标都将获得一个默认的空值,数值为0。
如果没有在字段规范中指定,则数据类型BYTES的维度和度量列将获得一个字节[0]的defaulit null值。