CREATE TABLE

description

  1. 该语句用于创建 table
  2. 语法:
  3. CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [database.]table_name
  4. (column_definition1[, column_definition2, ...])
  5. [ENGINE = [olap|mysql|broker]]
  6. [key_desc]
  7. [COMMENT "table comment"];
  8. [partition_desc]
  9. [distribution_desc]
  10. [PROPERTIES ("key"="value", ...)]
  11. [BROKER PROPERTIES ("key"="value", ...)]
  12. 1. column_definition
  13. 语法:
  14. col_name col_type [agg_type] [NULL | NOT NULL] [DEFAULT "default_value"]
  15. 说明:
  16. col_name:列名称
  17. col_type:列类型
  18. TINYINT1字节)
  19. 范围:-2^7 + 1 ~ 2^7 - 1
  20. SMALLINT2字节)
  21. 范围:-2^15 + 1 ~ 2^15 - 1
  22. INT4字节)
  23. 范围:-2^31 + 1 ~ 2^31 - 1
  24. BIGINT8字节)
  25. 范围:-2^63 + 1 ~ 2^63 - 1
  26. LARGEINT16字节)
  27. 范围:-2^127 + 1 ~ 2^127 - 1
  28. FLOAT4字节)
  29. 支持科学计数法
  30. DOUBLE12字节)
  31. 支持科学计数法
  32. DECIMAL[(precision, scale)] (16字节)
  33. 保证精度的小数类型。默认是 DECIMAL(10, 0)
  34. precision: 1 ~ 27
  35. scale: 0 ~ 9
  36. 其中整数部分为 1 ~ 18
  37. 不支持科学计数法
  38. DATE3字节)
  39. 范围:1900-01-01 ~ 9999-12-31
  40. DATETIME8字节)
  41. 范围:1900-01-01 00:00:00 ~ 9999-12-31 23:59:59
  42. CHAR[(length)]
  43. 定长字符串。长度范围:1 ~ 255。默认为1
  44. VARCHAR[(length)]
  45. 变长字符串。长度范围:1 ~ 65533
  46. HLL (1~16385个字节)
  47. hll列类型,不需要指定长度和默认值、长度根据数据的聚合
  48. 程度系统内控制,并且HLL列只能通过配套的hll_union_aggHll_cardinalityhll_hash进行查询或使用
  49. agg_type:聚合类型,如果不指定,则该列为 key 列。否则,该列为 value
  50. * SUMMAXMINREPLACE
  51. * HLL_UNION(仅用于HLL列,为HLL独有的聚合方式)、
  52. * BITMAP_UNION(仅用于 BITMAP 列,为 BITMAP 独有的聚合方式)、
  53. * REPLACE_IF_NOT_NULL:这个聚合类型的含义是当且仅当新导入数据是非NULL值时才会发生替换行为,如果新导入的数据是NULL,那么Doris仍然会保留原值。注意:如果用户在建表时REPLACE_IF_NOT_NULL列指定了NOT NULL,那么Doris仍然会将其转化为NULL,不会向用户报错。用户可以借助这个类型完成部分列导入的功能。
  54. *该类型只对聚合模型(key_desctypeAGGREGATE KEY)有用,其它模型不需要指定这个。
  55. 是否允许为NULL: 默认不允许为 NULLNULL 值在导入数据中用 \N 来表示
  56. 注意:
  57. BITMAP_UNION聚合类型列在导入时的原始数据类型必须是TINYINT,SMALLINT,INT
  58. 2. ENGINE 类型
  59. 默认为 olap。可选 mysql, broker
  60. 1) 如果是 mysql,则需要在 properties 提供以下信息:
  61. PROPERTIES (
  62. "host" = "mysql_server_host",
  63. "port" = "mysql_server_port",
  64. "user" = "your_user_name",
  65. "password" = "your_password",
  66. "database" = "database_name",
  67. "table" = "table_name"
  68. )
  69. 注意:
  70. "table" 条目中的 "table_name" mysql 中的真实表名。
  71. CREATE TABLE 语句中的 table_name 是该 mysql 表在 Palo 中的名字,可以不同。
  72. Palo 创建 mysql 表的目的是可以通过 Palo 访问 mysql 数据库。
  73. Palo 本身并不维护、存储任何 mysql 数据。
  74. 2) 如果是 broker,表示表的访问需要通过指定的broker, 需要在 properties 提供以下信息:
  75. PROPERTIES (
  76. "broker_name" = "broker_name",
  77. "path" = "file_path1[,file_path2]",
  78. "column_separator" = "value_separator"
  79. "line_delimiter" = "value_delimiter"
  80. )
  81. 另外还需要提供Broker需要的Property信息,通过BROKER PROPERTIES来传递,例如HDFS需要传入
  82. BROKER PROPERTIES(
  83. "username" = "name",
  84. "password" = "password"
  85. )
  86. 这个根据不同的Broker类型,需要传入的内容也不相同
  87. 注意:
  88. "path" 中如果有多个文件,用逗号[,]分割。如果文件名中包含逗号,那么使用 %2c 来替代。如果文件名中包含 %,使用 %25 代替
  89. 现在文件内容格式支持CSV,支持GZBZ2LZ4LZO(LZOP) 压缩格式。
  90. 3. key_desc
  91. 语法:
  92. key_type(k1[,k2 ...])
  93. 说明:
  94. 数据按照指定的key列进行排序,且根据不同的key_type具有不同特性。
  95. key_type支持一下类型:
  96. AGGREGATE KEY:key列相同的记录,value列按照指定的聚合类型进行聚合,
  97. 适合报表、多维分析等业务场景。
  98. UNIQUE KEY:key列相同的记录,value列按导入顺序进行覆盖,
  99. 适合按key列进行增删改查的点查询业务。
  100. DUPLICATE KEY:key列相同的记录,同时存在于Palo中,
  101. 适合存储明细数据或者数据无聚合特性的业务场景。
  102. 注意:
  103. AGGREGATE KEY外,其他key_type在建表时,value列不需要指定聚合类型。
  104. 4. partition_desc
  105. partition描述有两种使用方式
  106. 1) LESS THAN
  107. 语法:
  108. PARTITION BY RANGE (k1, k2, ...)
  109. (
  110. PARTITION partition_name1 VALUES LESS THAN MAXVALUE|("value1", "value2", ...),
  111. PARTITION partition_name2 VALUES LESS THAN MAXVALUE|("value1", "value2", ...)
  112. ...
  113. )
  114. 说明:
  115. 使用指定的 key 列和指定的数值范围进行分区。
  116. 1) 分区名称仅支持字母开头,字母、数字和下划线组成
  117. 2) 目前仅支持以下类型的列作为 Range 分区列,且只能指定一个分区列
  118. TINYINT, SMALLINT, INT, BIGINT, LARGEINT, DATE, DATETIME
  119. 3) 分区为左闭右开区间,首个分区的左边界为做最小值
  120. 4) NULL 值只会存放在包含最小值的分区中。当包含最小值的分区被删除后,NULL 值将无法导入。
  121. 5) 可以指定一列或多列作为分区列。如果分区值缺省,则会默认填充最小值。
  122. 注意:
  123. 1) 分区一般用于时间维度的数据管理
  124. 2) 有数据回溯需求的,可以考虑首个分区为空分区,以便后续增加分区
  125. 2Fixed Range
  126. 语法:
  127. PARTITION BY RANGE (k1, k2, k3, ...)
  128. (
  129. PARTITION partition_name1 VALUES [("k1-lower1", "k2-lower1", "k3-lower1",...), ("k1-upper1", "k2-upper1", "k3-upper1", ...)),
  130. PARTITION partition_name2 VALUES [("k1-lower1-2", "k2-lower1-2", ...), ("k1-upper1-2", MAXVALUE, ))
  131. "k3-upper1-2", ...
  132. )
  133. 说明:
  134. 1Fixed RangeLESS THAN相对灵活些,左右区间完全由用户自己确定
  135. 2)其他与LESS THAN保持同步
  136. 5. distribution_desc
  137. 1) Hash 分桶
  138. 语法:
  139. DISTRIBUTED BY HASH (k1[,k2 ...]) [BUCKETS num]
  140. 说明:
  141. 使用指定的 key 列进行哈希分桶。默认分区数为10
  142. 建议:建议使用Hash分桶方式
  143. 6. PROPERTIES
  144. 1) 如果 ENGINE 类型为 olap,则可以在 properties 中指定列存(目前我们仅支持列存)
  145. PROPERTIES (
  146. "storage_type" = "[column]",
  147. )
  148. 2) 如果 ENGINE 类型为 olap
  149. 可以在 properties 设置该表数据的初始存储介质、存储到期时间和副本数。
  150. PROPERTIES (
  151. "storage_medium" = "[SSD|HDD]",
  152. ["storage_cooldown_time" = "yyyy-MM-dd HH:mm:ss"],
  153. ["replication_num" = "3"]
  154. )
  155. storage_medium 用于指定该分区的初始存储介质,可选择 SSD HDD。默认为 HDD
  156. storage_cooldown_time 当设置存储介质为 SSD 时,指定该分区在 SSD 上的存储到期时间。
  157. 默认存放 7 天。
  158. 格式为:"yyyy-MM-dd HH:mm:ss"
  159. replication_num: 指定分区的副本数。默认为 3
  160. 当表为单分区表时,这些属性为表的属性。
  161. 当表为两级分区时,这些属性为附属于每一个分区。
  162. 如果希望不同分区有不同属性。可以通过 ADD PARTITION MODIFY PARTITION 进行操作
  163. 3) 如果 Engine 类型为 olap, 并且 storage_type column, 可以指定某列使用 bloom filter 索引
  164. bloom filter 索引仅适用于查询条件为 in equal 的情况,该列的值越分散效果越好
  165. 目前只支持以下情况的列:除了 TINYINT FLOAT DOUBLE 类型以外的 key 列及聚合方法为 REPLACE value
  166. PROPERTIES (
  167. "bloom_filter_columns"="k1,k2,k3"
  168. )
  169. 4) 如果希望使用Colocate Join 特性,需要在 properties 中指定
  170. PROPERTIES (
  171. "colocate_with"="table1"
  172. )

example

  1. 1. 创建一个 olap 表,使用 HASH 分桶,使用列存,相同key的记录进行聚合
  2. CREATE TABLE example_db.table_hash
  3. (
  4. k1 TINYINT,
  5. k2 DECIMAL(10, 2) DEFAULT "10.5",
  6. v1 CHAR(10) REPLACE,
  7. v2 INT SUM
  8. )
  9. ENGINE=olap
  10. AGGREGATE KEY(k1, k2)
  11. COMMENT "my first doris table"
  12. DISTRIBUTED BY HASH(k1) BUCKETS 32
  13. PROPERTIES ("storage_type"="column");
  14. 2. 创建一个 olap 表,使用 Hash 分桶,使用列存,相同key的记录进行覆盖,
  15. 设置初始存储介质和冷却时间
  16. CREATE TABLE example_db.table_hash
  17. (
  18. k1 BIGINT,
  19. k2 LARGEINT,
  20. v1 VARCHAR(2048) REPLACE,
  21. v2 SMALLINT SUM DEFAULT "10"
  22. )
  23. ENGINE=olap
  24. UNIQUE KEY(k1, k2)
  25. DISTRIBUTED BY HASH (k1, k2) BUCKETS 32
  26. PROPERTIES(
  27. "storage_type"="column"
  28. "storage_medium" = "SSD",
  29. "storage_cooldown_time" = "2015-06-04 00:00:00"
  30. );
  31. 3. 创建一个 olap 表,使用 Range 分区,使用Hash分桶,默认使用列存,
  32. 相同key的记录同时存在,设置初始存储介质和冷却时间
  33. 1LESS THAN
  34. CREATE TABLE example_db.table_range
  35. (
  36. k1 DATE,
  37. k2 INT,
  38. k3 SMALLINT,
  39. v1 VARCHAR(2048),
  40. v2 DATETIME DEFAULT "2014-02-04 15:36:00"
  41. )
  42. ENGINE=olap
  43. DUPLICATE KEY(k1, k2, k3)
  44. PARTITION BY RANGE (k1)
  45. (
  46. PARTITION p1 VALUES LESS THAN ("2014-01-01"),
  47. PARTITION p2 VALUES LESS THAN ("2014-06-01"),
  48. PARTITION p3 VALUES LESS THAN ("2014-12-01")
  49. )
  50. DISTRIBUTED BY HASH(k2) BUCKETS 32
  51. PROPERTIES(
  52. "storage_medium" = "SSD", "storage_cooldown_time" = "2015-06-04 00:00:00"
  53. );
  54. 说明:
  55. 这个语句会将数据划分成如下3个分区:
  56. ( { MIN }, {"2014-01-01"} )
  57. [ {"2014-01-01"}, {"2014-06-01"} )
  58. [ {"2014-06-01"}, {"2014-12-01"} )
  59. 不在这些分区范围内的数据将视为非法数据被过滤
  60. 2) Fixed Range
  61. CREATE TABLE table_range
  62. (
  63. k1 DATE,
  64. k2 INT,
  65. k3 SMALLINT,
  66. v1 VARCHAR(2048),
  67. v2 DATETIME DEFAULT "2014-02-04 15:36:00"
  68. )
  69. ENGINE=olap
  70. DUPLICATE KEY(k1, k2, k3)
  71. PARTITION BY RANGE (k1, k2, k3)
  72. (
  73. PARTITION p1 VALUES [("2014-01-01", "10", "200"), ("2014-01-01", "20", "300")),
  74. PARTITION p2 VALUES [("2014-06-01", "100", "200"), ("2014-07-01", "100", "300"))
  75. )
  76. DISTRIBUTED BY HASH(k2) BUCKETS 32
  77. PROPERTIES(
  78. "storage_medium" = "SSD"
  79. );
  80. 4. 创建一个 mysql
  81. CREATE TABLE example_db.table_mysql
  82. (
  83. k1 DATE,
  84. k2 INT,
  85. k3 SMALLINT,
  86. k4 VARCHAR(2048),
  87. k5 DATETIME
  88. )
  89. ENGINE=mysql
  90. PROPERTIES
  91. (
  92. "host" = "127.0.0.1",
  93. "port" = "8239",
  94. "user" = "mysql_user",
  95. "password" = "mysql_passwd",
  96. "database" = "mysql_db_test",
  97. "table" = "mysql_table_test"
  98. )
  99. 5. 创建一个数据文件存储在HDFS上的 broker 外部表, 数据使用 "|" 分割,"\n" 换行
  100. CREATE EXTERNAL TABLE example_db.table_broker (
  101. k1 DATE,
  102. k2 INT,
  103. k3 SMALLINT,
  104. k4 VARCHAR(2048),
  105. k5 DATETIME
  106. )
  107. ENGINE=broker
  108. PROPERTIES (
  109. "broker_name" = "hdfs",
  110. "path" = "hdfs://hdfs_host:hdfs_port/data1,hdfs://hdfs_host:hdfs_port/data2,hdfs://hdfs_host:hdfs_port/data3%2c4",
  111. "column_separator" = "|",
  112. "line_delimiter" = "\n"
  113. )
  114. BROKER PROPERTIES (
  115. "username" = "hdfs_user",
  116. "password" = "hdfs_password"
  117. )
  118. 6. 创建一张含有HLL列的表
  119. CREATE TABLE example_db.example_table
  120. (
  121. k1 TINYINT,
  122. k2 DECIMAL(10, 2) DEFAULT "10.5",
  123. v1 HLL HLL_UNION,
  124. v2 HLL HLL_UNION
  125. )
  126. ENGINE=olap
  127. AGGREGATE KEY(k1, k2)
  128. DISTRIBUTED BY HASH(k1) BUCKETS 32
  129. PROPERTIES ("storage_type"="column");
  130. 7. 创建一张含有BITMAP_UNION聚合类型的表(v1v2列的原始数据类型必须是TINYINT,SMALLINT,INT
  131. CREATE TABLE example_db.example_table
  132. (
  133. k1 TINYINT,
  134. k2 DECIMAL(10, 2) DEFAULT "10.5",
  135. v1 VARCHAR(0) BITMAP_UNION, // 注意: bitmap_union的varchar长度需要指定为0
  136. v2 VARCHAR(0) BITMAP_UNION
  137. )
  138. ENGINE=olap
  139. AGGREGATE KEY(k1, k2)
  140. DISTRIBUTED BY HASH(k1) BUCKETS 32
  141. PROPERTIES ("storage_type"="column");
  142. 8. 创建两张支持Colocat Join的表t1 t2
  143. CREATE TABLE `t1` (
  144. `id` int(11) COMMENT "",
  145. `value` varchar(8) COMMENT ""
  146. ) ENGINE=OLAP
  147. DUPLICATE KEY(`id`)
  148. DISTRIBUTED BY HASH(`id`) BUCKETS 10
  149. PROPERTIES (
  150. "colocate_with" = "t1"
  151. );
  152. CREATE TABLE `t2` (
  153. `id` int(11) COMMENT "",
  154. `value` varchar(8) COMMENT ""
  155. ) ENGINE=OLAP
  156. DUPLICATE KEY(`id`)
  157. DISTRIBUTED BY HASH(`id`) BUCKETS 10
  158. PROPERTIES (
  159. "colocate_with" = "t1"
  160. );
  161. 9. 创建一个数据文件存储在BOS上的 broker 外部表
  162. CREATE EXTERNAL TABLE example_db.table_broker (
  163. k1 DATE
  164. )
  165. ENGINE=broker
  166. PROPERTIES (
  167. "broker_name" = "bos",
  168. "path" = "bos://my_bucket/input/file",
  169. )
  170. BROKER PROPERTIES (
  171. "bos_endpoint" = "http://bj.bcebos.com",
  172. "bos_accesskey" = "xxxxxxxxxxxxxxxxxxxxxxxxxx",
  173. "bos_secret_accesskey"="yyyyyyyyyyyyyyyyyyyy"
  174. )

keyword

  1. CREATE,TABLE