pinot的schema配置

下面文章为官网翻译:

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"

    }

  }}

Schema Name:

每个Pinot模式都有一个用于标识它的名称。例如,在conig表中通过名称指定表的模式。

FieldSpecs:

模式中的每一列都使用fieldSpec进行描述,fieldSpec捕获列的各种属性,如名称、数据类型等。一个模式可能包含一个描述所有维度列的维度规范数组、描述所有度量列的metricFieldSpecs和描述时间列的timeFieldSpec。

 

Dimensions:

上面的schema示例有两个维度:类型Long的flightNumber和类型String的标记。维度列支持的数据类型有:

  • INT

  • FLOAT

  • LONG

  • DOUBLE

  • STRING

  • BYTES

  • 维度列还有一个名为singlevaluedfile的可选属性,默认值为true。此属性描述列是否可以接受一行的单个值或多个值。在上面的示例中,维度标记是多值的。 这意味着它可以对特定行有多个值,比如tag1、tag2、tag3。对于多值列,单独的行不一定需要具有相同数量的值。这方面的典型用例是一个列,如skillSet for a person(表中的一行),它可以有多个值,如房地产、抵押贷款。

 

Metrics:

模式中的列price是一个度量列,因为可以在其中查询平均值、最小值、最大值等聚合,而且通常是单值的。公制列可以有以下数据类型:

  • INT

  • FLOAT

  • LONG

  • DOUBLE

  • BYTES

    公制列通常是数值型的。但是,注意字节是度量列允许的数据类型。这通常用于HLL、TDigest等特殊表示的情况,其中列实际存储了值的字节序列化版本。

Time:

上面的模式还包含一个timeFieldSpec,用于指定时间列的属性:

incomingGranularitySpec: 指定输入到Pinot的数据中出现的时间戳的名称、数据类型和时间类型。

outgoingGranularitySpec: 指定要存储在Pinot中的时间戳的名称、数据类型和时间类型。

在本例中,以秒为单位指定的输入时间戳将 在存储到Pinot之前自动转换为天。timeFieldSpec还有一个可选属性timeFormat,它可以接受EPOCH(默认值)和SIMPLE_DATE_FORMAT:

时间列对于附加(增量数据推送)用例是必需的,但是对于刷新(每次推送数据刷新)用例是可选的。更多的细节可以在配置部分找到。

 

Default Null Value:

Pinot本身不存储空值,因此空值存储为fieldspec中指定的占位符值,或系统选择的默认值。在上面的模式示例中,列flight的输入中的所有空值都被转换为字符串“null”并在内部存储。同样,列price的输入中的空值被转换为整数0并存储在内部。由于这是一个可选字段,如果未指定,系统将按如下方式选择默认空值:

Dimensions: 数值字段的默认空值为MIN_VALUE (e。g整数。MIN_VALUE,翻倍。MIN_VALUE等),如果没有在字段规范中指定,则字符串字段将获得默认的空值字符串“null”。

Metrics: 如果没有在字段规范中指定,所有指标都将获得一个默认的空值,数值为0。

如果没有在字段规范中指定,则数据类型BYTES的维度和度量列将获得一个字节[0]的defaulit null值。

 

你可能感兴趣的:(pinot)