kudu.client.master-addresses Kudu主地址列表,多个地址时使用逗号(,)分隔。

支持以下格式:example.com、example.com:7051、192.0.2.1、192.0.2.1:7051、[2001:db8::1]、[2001:db8::1]:7051和2001:db8::1。

默认值为localhost。

kudu.schema-emulation.enabled 是否开启Schema模拟功能。 取值如下:
  • false(默认值):不开启Schema模拟功能。
  • true:开启Schema模拟功能。
  • 注意 您可以在 kudu.properties 页签,单击右上角的自定义配置添加该配置项,添加配置项详情请参见 添加组件参数

    Apache Kudu不支持Schema,但是通过配置Kudu Connector可以支持Schema功能。

    不开启Schema模拟功能(默认行为)

    Schema模拟默认是关闭的,此时kudu的表都在 default 的Schema下。

    例如,您可以通过执行 SELECT * FROM kudu.default.orders 来查询表 orders ,如果Catalog和 Schema分别指定为 kudu default ,则查询语句可以简化为 SELECT * FROM orders

    Kudu的表名称可以包含任意字符,因此需要用双引号(")引用表名称。例如,查询表 special.table! ,执行语句为 SELECT * FROM kudu.default."special.table!"

    示例如下:
  • default 的Schema下创建表 users
    CREATE TABLE kudu.default.users (
      user_id int WITH (primary_key = true),
      first_name varchar,
      last_name varchar
    ) WITH (
      partition_by_hash_columns = ARRAY['user_id'],
      partition_by_hash_buckets = 2
                                  
    说明 创建表时必须指定必要的表信息,例如,主键、列的编码格式或压缩格式、Hash分区或Range分区等。
  • 查看表信息。
    DESCRIBE kudu.default.users;
    返回如下类似信息。
       Column   |  Type   |                      Extra                      | Comment
    ------------+---------+-------------------------------------------------+---------
     user_id    | integer | primary_key, encoding=auto, compression=default |
     first_name | varchar | nullable, encoding=auto, compression=default    |
     last_name  | varchar | nullable, encoding=auto, compression=default    |
    (3 rows)
  • 插入数据。
    INSERT INTO kudu.default.users VALUES (1, 'Donald', 'Duck'), (2, 'Mickey', 'Mouse');
  • 查询数据。
    SELECT * FROM kudu.default.users;
  • 开启Schema模拟功能

    如果在连接器的配置文件etc/catalog/kudu.properties里设置了开启Schema模拟功能,则表会根据命名约定被映射到对应的Schema里。
  • 如果设置了kudu.schema-emulation.enabled=truekudu.schema-emulation.prefix=,则映射关系如下表。
    创建表需要指定列、数据类型和分区信息,也可以根据您实际的情况指定列编码格式或压缩格式。创建表示例如下。
    CREATE TABLE user_events (
      user_id int WITH (primary_key = true),
      event_name varchar WITH (primary_key = true),
      message varchar,
      details varchar WITH (nullable = true, encoding = 'plain')
    ) WITH (
      partition_by_hash_columns = ARRAY['user_id'],
      partition_by_hash_buckets = 5,
      number_of_replicas = 3
                      

    该示例中主键为user_idevent_name,通过user_id列的HASH值划分为5个分区,number_of_replicas设置为3。

    创建表时相关参数描述如下:
  • 主键列必须放在前面,分区列必须选取自主键列。
  • number_of_replicas:可选项,该值指定了tablet的副本数,且必须为奇数。如果没有指定该配置,则使用Kudu Master 默认配置的副本数。
  • Kudu支持Hash和Range两种类型的分区。Hash分区根据Hash值分发数据行到多个桶中的一个桶。Range分区使用有序的Range分区键分发数据行,具体的Range分区必须被显式创建。Kudu支持多级分区,一个表至少要有一个Hash或Range分区,但最多有一个Range分区,可以有多个Hash分区。
  • 除了指定列名称和类型,还可以指定其他列属性。
    示例如下。
    CREATE TABLE mytable (
      name varchar WITH (primary_key = true, encoding = 'dictionary', compression = 'snappy'),
      index bigint WITH (nullable = true, encoding = 'runlength', compression = 'lz4'),
      comment varchar WITH (nullable = true, encoding = 'plain', compression = 'default'),
    ) WITH (...);
    一个表至少要有一个Hash或Range分区,但最多只能有一个Range分区,可以有多个Hash分区。分区信息如下:
  • Hash分区
  • 定义一组分区
    您可以使用表属性partition_by_hash_columns配置分区列,表属性partition_by_hash_buckets配置分区个数,所有的分区列必须是主键列的子集。示例如下。
    CREATE TABLE mytable (
      col1 varchar WITH (primary_key=true),
      col2 varchar WITH (primary_key=true),
    ) WITH (
      partition_by_hash_columns = ARRAY['col1', 'col2'],
      partition_by_hash_buckets = 4
                                           
    说明 该示例定义了(col1,col2)的Hash分区,数据分布到4个分区。
  • 定义两组分区
    如果需要定义两个独立的Hash分区组,可以再设置表属性partition_by_second_hash_columnspartition_by_second_hash_buckets。示例如下。
    CREATE TABLE mytable (
      col1 varchar WITH (primary_key=true),
      col2 varchar WITH (primary_key=true),
    ) WITH (
      partition_by_hash_columns = ARRAY['col1'],
      partition_by_hash_buckets = 2,
      partition_by_second_hash_columns = ARRAY['col2'],
      partition_by_second_hash_buckets = 3
                                           
    说明 该示例定义了两组Hash分区,第一组Hash分区按照列col1对数据行分布到2个分区,第二组Hash分区按照列col2对数据行分布到3个分区,因此该表会有共计2*3=6个分区。
  • Range分区
    kudu表最多可以有一个Range分区,可以使用表属性partition_by_range_columns定义。在创建表的时候,可以使用表属性range_partitions定义分区范围,表属性kudu.system.add_range_partitionkudu.system.drop_range_partition可以对已有的表进行Range分区管理。示例如下。
    CREATE TABLE events (
      rack varchar WITH (primary_key=true),
      machine varchar WITH (primary_key=true),
      event_time timestamp WITH (primary_key=true),
    ) WITH (
      partition_by_hash_columns = ARRAY['rack'],
      partition_by_hash_buckets = 2,
      partition_by_second_hash_columns = ARRAY['machine'],
      partition_by_second_hash_buckets = 3,
      partition_by_range_columns = ARRAY['event_time'],
      range_partitions = '[{"lower": null, "upper": "2018-01-01T00:00:00"},
                           {"lower": "2018-01-01T00:00:00", "upper": null}]'
                                     
    说明 该示例定义了二组Hash分区和一个对event_time列进行Range分区的表,Range分区范围由2018-01-01T00:00:00进行分割。
    分区操作示例如下:
  • 增加一个Range分区
    CALL kudu.system.add_range_partition(<your_schema_name>, <your_table_name>, <range_partition_as_json_string>)
  • 删除一个Range分区
    CALL kudu.system.drop_range_partition(<your_schema_name>, <your_table_name>, <range_partition_as_json_string>)
  • <range_partition_as_json_string> JSON格式表示的Range分区的上下边界,格式为'{"lower": <value>, "upper": <value>}',如果分区有多个列,则格式为'{"lower": [<value_col1>,...], "upper": [<value_col1>,...]}',上下边界具体的取值形式由列数据类型决定。数据类型和JSON字符串类型对应关系如下:
  • BIGINT:‘{“lower”: 0, “upper”: 1000000}’
  • SMALLINT:‘{“lower”: 10, “upper”: null}’
  • VARCHAR:‘{“lower”: “A”, “upper”: “M”}’
  • TIMESTAMP:‘{“lower”: “2018-02-01T00:00:00.000”, “upper”: “2018-02-01T12:00:00.000”}’
  • BOOLEAN:‘{“lower”: false, “upper”: true}’
  • VARBINARY:Base64编码的字符串值
  • 说明 设置为null时,则表示无限边界。 示例如下。
    CALL kudu.system.add_range_partition('myschema', 'events', '{"lower": "2018-01-01", "upper": "2018-06-01"}')
    说明 该示例myschema里的表events增加了一个Range分区,该分区的下界是2018-01-01,即精确值是2018-01-01T00:00:00.000,分区的上界是2018-06-01
    您可以使用SQL语句SHOW CREATE TABLE查询已经存在的Range分区,分区信息通过表属性range_partitions展示。
  •