Kudu实践

 二维码 31
发表时间:2021-09-22 09:07

使用注意点

主键 Primary Key

  • 在创建表之后,不能更改主键。必须删除并重新创建表以选择新的主键。

  • 设置主键的列必须为表的首列。

  • 不能使用 UPDATE 语句修改主键。若要修改一行的主键,必须删除该行并使用修改的键重新插入该行。这样的修改是非原子的。

  • DOUBLE、FLOAT 或 BOOL 类型的列不允许设置为主键。此外,主键列必须是 NOT NULL。

  • 不支持自动生成主键。

  • 在Kudu完成内部复合键编码之后,组成复合主键的单元格总数被限制为16KB。

单元 Cells

  • 在编码或压缩之前,单个单元不能大于64KB。

  • 在Kudu完成内部复合键编码之后,组成复合键的单元格总数被限制为16KB。

  • 插入不符合这些限制的行将导致错误返回给客户端。

列 Columns

  • 默认情况下,Kudu表最多可以有300列。我们推荐使用较少列的设计模式以获得最佳性能。

  • 不支持 CHAR、VARCHAR、DATE 和其他复杂类型,如:ARRAY、MAP 和 STRUCT。

  • 现有列的类型和可空性不能通过更改表来更改。

  • 删除列不会立即回收空间。必须首先运行压缩。

  • DECIMAL 列的精度和比例不能通过更改表来更改。

表 Tables

  • 表必须有奇数个副本,最多7个。

  • 不能更改复制因子(在创建表时设置)。

  • 没有办法手动运行压缩,但是删除表将立即回收空间。

其他使用限制

  • 不支持二级索引。

  • 不支持多行事务。

  • 不支持关系特性,如外键。

  • 诸如列和表名称之类的标识符被限制为有效的UTF-8字符串。此外,最大长度为256个字符。

分区的限制

  • 每个表的主键必须提前手动进行分区,目前还不支持自动分区。除了添加或删除范围分区,Kudu不允许在创建表之后更改分区方式。

  • 现有表中的数据目前无法自动重新分区。有一个解决方案就是使用新的分区创建一个新表,并将旧表的数据插入。

  • 如果有大部分Tablets的副本丢失,需要人工干预才能修复。

Kudu基本操作

创建库

CREATE (DATABASE|SCHEMA)
  [IF NOT EXISTS]
  database_name
  [COMMENT 'database_comment']
  [LOCATION hdfs_path];

创建表

CREATE TABLE [IF NOT EXISTS] [db_name.]table_name
  (col_name data_type
    [kudu_column_attribute ...]
    [COMMENT 'col_comment']
    [, ...]
    [PRIMARY KEY (col_name[, ...])]
  )
  [PARTITION BY kudu_partition_clause]
  [COMMENT 'table_comment']
  STORED AS KUDU
  [TBLPROPERTIES ('key1'='value1', 'key2'='value2', ...)]

列属性:

  • PRIMARY KEY

  • [NOT] NULL

  • ENCODING codec

  • COMPRESSION algorithm

  • DEFAULT constant

  • BLOCK_SIZE number

删除库

DROP (DATABASE|SCHEMA)
  [IF EXISTS]
  database_name
  [RESTRICT | CASCADE];

删除表

DROP TABLE
  [IF EXISTS]
  [db_name.]table_name
  [PURGE]

查询语句

[WITH name AS (select_expression) [, ...] ]
SELECT
[ALL | DISTINCT]
[STRAIGHT_JOIN]
expression [, expression ...]
FROM table_reference [, table_reference ...]
[[FULL | [LEFT | RIGHT] INNER | [LEFT | RIGHT] OUTER | [LEFT | RIGHT] SEMI | [LEFT | RIGHT] ANTI | CROSS]
JOIN table_reference
[ON join_equality_clauses | USING (col1[, col2 ...]] ...
WHERE conditions
GROUP BY { column | expression [, ...] }
HAVING conditions
ORDER BY { column | expression [ASC | DESC] [NULLS FIRST | NULLS LAST] [, ...] }
LIMIT expression [OFFSET expression]
[UNION [ALL] select_statement] ...]
table_reference := { table_name | (subquery) }
[ TABLESAMPLE SYSTEM(percentage) [REPEATABLE(seed)] ]


会员登录
登录
其他账号登录:
我的资料
留言
回到顶部