华为云用户手册

  • 限制 session属性可以设置bucket_count,默认值为-1,表示未设置。创建分区表时,如果bucket_count为-1且建表语句中未设置buckets,则使用默认值16。 默认外部表存储位置/user/hive/warehouse/{schema_name}/{table_name},其中{schema_name}为建表时使用的schema,{table_name}为表名。 指定属性“transactional=true”可以让表支持“原子性、一致性、隔离性、持久性”写入的事务能力,但是将表定义为事务表后,无法通过设置“transactional=false”将其退化为非事务表。 transactional='true'或 '0'在执行过程中不会进行类型转换,所以这种写法会抛出异常: Cannot convert ['true'] to boolean Cannot convert ['0'] to boolean 默认不允许向托管表(表属性external = true)插入数据,如需使用该功能,可参考注意事项,添加hive自定义属性:hive.non-managed-table-writes-enabled=true。 Mppdb有一个限制,数据库的标识符的最大长度为63,如果把标识符命名超过了最大长度,那么会被自动截取掉超出的部分,只留下最大长度的标识符。 跨域场景不支持建表。
  • 语法 ① CREATE TABLE [ IF NOT EXISTS ] [catalog_name.][db_name.]table_name ( { column_name data_type [ NOT NULL ] [ COMMENT col_comment] [ WITH ( property_name = expression [, ...] ) ] | LIKE existing_table_name [ { INCLUDING | EXCLUDING } PROPERTIES ] } [, ...] ) [ COMMENT table_comment ] [ WITH ( property_name = expression [, ...] ) ] ② CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [catalog_name.][db_name.]table_name ( { column_name data_type [ NOT NULL ] [ COMMENT comment ] [ WITH ( property_name = expression [, ...] ) ] | LIKE existing_table_name [ { INCLUDING | EXCLUDING } PROPERTIES ] } [, ...] ) [COMMENT 'table_comment'] [PARTITIONED BY(col_name data_type, ....)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name, col_name, ...)] INTO num_buckets BUCKETS] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION 'hdfs_path'] [TBLPROPERTIES (orc_table_property = value [, ...] ) ] ③ CREATE [EXTERNAL] TABLE [IF NOT EXISTS] [catalog_name.][db_name.]table_name ( { column_name data_type [ NOT NULL ] [ COMMENT comment ] [ WITH ( property_name = expression [, ...] ) ] | LIKE existing_table_name [ { INCLUDING | EXCLUDING } PROPERTIES ] } [, ...] ) [PARTITIONED BY(col_name data_type, ....)] [SORT BY ([column [, column ...]])] [COMMENT 'table_comment'] [ROW FORMAT row_format] [STORED AS file_format] [LOCATION 'hdfs_path'] [TBLPROPERTIES (orc_table_property = value [, ...] ) ]
  • 描述 使用CREATE TABLE创建一个具有指定列的、新的空表。使用CREATE TABLE AS创建带数据的表。 使用可选参数IF NOT EXISTS,如果表已经存在则不会报错。 WITH子句可用于在新创建的表或单列上设置属性,如表的存储位置(location)、是不是外表(external)等。 LIKE子句用于在新表中包含来自现有表的所有列定义。可以指定多个LIKE子句,从而允许从多个表中复制列。如果指定了INCLUDING PROPERTIES,则将所有表属性复制到新表中。如果WITH子句指定的属性名称与复制的属性名称相同,则将使用WITH子句中的值。默认是EXCLUDING PROPERTIES属性,而且最多只能为一个表指定INCLUDING PROPERTIES属性。 PARTITIONED BY能够用于指定分区的列;CLUSTERED BY能够被用于指定分桶的列;SORT BY和SORTED BY能够用于给指定的分桶列进行排序;BUCKETS能够被用于指定分桶数;EXTERNAL可用于指定创建外部表;STORED AS能被用于指定文件存储的格式;LOCATION能被用于指定在HDFS上存储的路径。 想要查看支持哪些column属性,可以运行以下命令,会显示当前对接的catalog分别支持哪些列属性。 SELECT * FROM system.metadata.column_properties; 想要查看支持哪些table属性,可以运行以下命令: SELECT * FROM system.metadata.table_properties; 下表为catalog为hive时的查询结果。 SELECT * FROM system.metadata.table_properties where catalog_name = 'hive'; catalog_name property_name default_value type description hive auto_purge false boolean Skip trash when table or partition is deleted hive avro_schema_url - varchar URI pointing to Avro schema for the table hive bucket_count 0 integer Number of buckets hive bucketed_by [] array(varchar) Bucketing columns hive bucketing_version - integer Bucketing version hive csv_escape - varchar CS V escape character hive csv_quote - varchar CSV quote character hive csv_separator - varchar CSV separator character hive external_location - varchar File system location URI for external table hive format ORC varchar Hive storage format for the table. Possible values: [ORC, PARQUET, AVRO, RCBINARY, RCTEXT, SEQUENCEFILE, JSON, TEXTFILE, TEXTFILE_MULTIDELIM, CSV] hive orc_compress GZIP varchar Compression codec used. Possible values: [NONE, SNAPPY, LZ4, ZSTD, GZIP, ZLIB] hive orc_compress_size 262144 bigint orc compression size hive orc_row_index_stride 10000 integer no. of row index strides hive orc_stripe_size 67108864 bigint orc stripe size hive orc_bloom_filter_columns [] array(varchar) ORC Bloom filter index columns hive orc_bloom_filter_fpp 0.05 double ORC Bloom filter false positive probability hive partitioned_by [] array(varchar) Partition columns hive sorted_by [] array(varchar) Bucket sorting columns hive textfile_skip_footer_line_count - integer Number of footer lines hive textfile_skip_header_line_count - integer Number of header lines hive transactional false boolean Is transactional property enabled
  • 现象描述 MRS 3.3.1及之后版本,HBase默认适配开启HDFS多路读功能(HDFS多路读相关介绍请参见配置HDFS多路读)以降低读取延迟及适应网络变化,相关参数如表1所示。 表1 HBase适配HDFS多路读相关参数 参数名称 参数描述 默认值 取值范围 dfs.client.hedged.read.threshold.millis HDFS客户端决定是否启动多路读取之前等待第一个数据块的第一个字节的时间,单位:毫秒。 250 大于等于1 dfs.client.hedged.read.threadpool.size 多路读取线程池的大小,设置参数值大于0时启用多路读功能。 200 大于等于0 由于HDFS多路读功能在磁盘IO负载高的情况下可能导致性能劣化,在此场景下,HBase侧需要参考操作步骤关闭HDFS多路读功能。
  • 原因分析 HDFS进入安全模式后HBase服务异常,导致meta表下线;HDFS退出安全模式后,下线的meta表未上线,查看RegionServer日志存在“No namenode available to invoke create /hbase/WALs/xxxx.meta”报错。 由于meta表在HDFS故障恢复后的上线过程中无法记录上线状态,导致meta表无法正常上线,且Manager实例健康检查自动恢复重试存在重试次数限制,最终导致meta表上线失败。因此,HDFS退出安全模式后,需要手动介入进行恢复。
  • 示例 创建一个名为web的schema: CREATE SCHEMA web; 在指定路径创建schema,兼容写法示例: CREATE SCHEMA test_schema_5 LOCATION '/user/hive'; 在名为Hive的CATA LOG 下创建一个名为sales的schema: CREATE SCHEMA hive.sales; 如果当前catalogs下名为traffic的schema不存在时,则创建一个名为traffic的schema: CREATE SCHEMA IF NOT EXISTS traffic; 创建一个带属性的schema: CREATE DATABASE createtestwithlocation COMMENT 'Holds all values' LOCATION '/user/hive/warehouse/create_new' WITH dbproperties('name'='akku', 'id' ='9'); --通过describe schema|database 语句来查看刚创建的schemadescribe schema createtestwithlocation;
  • 使用方法 在创建的JDBC Connector Sink流表中添加“filter.record.enabled”和“filter.row-kinds”参数。 “filter.record.enabled”默认值为“false”。 “filter.row-kinds”默认值为“UPDATE_BEFORE, DELETE”。 SQL示例如下: CREATE TABLE user_score ( idx varchar(20), user_id varchar(20), score bigint) WITH ( 'connector' = 'kafka', 'topic' = 'topic-qk', 'properties.bootstrap.servers' = 'xxxx:21005', 'properties.group.id' = 'test_qk', 'scan.startup.mode' = 'latest-offset', 'format' = 'csv');CREATE TABLE mysql_output ( idx varchar(20), user_id varchar(20), all_score bigint, PRIMARY KEY(idx, user_id) NOT ENFORCED) WITH( 'connector' = 'jdbc', 'url' = 'jdbc:mysql://MySQL的服务器IP:MySQL的服务器端口/mysql', 'table-name' = 'customer_t1', 'username' = 'username', --连接MySQL数据库的用户名 'password' = 'password',--连接MySQL数据库的密码 'filter.record.enabled' = 'true', 'filter.row-kinds' = 'UPDATE_BEFORE');insert into mysql_outputselect idx, user_id, sum(score) as all_scorefrom user_scoregroup by idx, user_id;
  • 基本语法 CREATE TABLE [IF NOT EXISTS] [database_name.]table_name [ (columnTypeList)] USING iceberg [PARTITIONED BY (partition-expressions)] [LOCATION '(fully-qualified-uri)' ] [COMMENT 'table documentation' ] [TBLPROPERTIES ('key'='value', ...)]; 其中: PARTITIONED:用于指定分区字段。 LOCATION:用于指定表存储位置。 COMMENT:用于指定表描述。 TBLPROPERTIES:用于指定表属性。 Iceberg不支持创建CTAS或RTAS表。
  • 操作步骤 使用root登录客户端安装节点,执行如下命令: cd 客户端安装目录 执行以下命令环境变量并认证用户: source bigdata_env kinit 创建的业务用户(未开启Kerberos认证的用户请跳过该操作) 将以下参数添加到“Spark/spark/conf/spark-defaults.conf”文件中并保存: spark.sql.catalog.local=org.apache.iceberg.spark.SparkCatalogspark.sql.catalog.local.type=hadoopspark.sql.catalog.local.warehouse=/tmp/ice-warehousespark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalogspark.sql.catalog.spark_catalog.type=hive 执行以下命令登录spark-sql客户端: Hadoop Catalog方式 spark-sql --master yarn \ --conf spark.sql.defaultCatalog=local \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.storeAssignmentPolicy=ANSI Hadoop Catalog方式不支持在创建数据库和创建表时指定Location。 如果使用Hadoop Catalog,需要设置操作用户具有3中配置的“spark.sql.catalog.local.warehouse”路径的写和执行权限。 Hive Catalog方式 spark-sql --master yarn \ --conf spark.sql.defaultCatalog=spark_catalog \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.storeAssignmentPolicy=ANSI 执行以下命令创建数据库: create database if not exists iceberg_db; 执行以下命令创建Iceberg表: use iceberg_db; CREATE TABLE if not exists sample_table (id bigint, data string) USING iceberg TBLPROPERTIES ('write.format.default'='parquet'); 执行以下命令向Iceberg表中插入数据: INSERT INTO sample_table VALUES (4, 'a'), (5, 'b'), (6, 'c'); 执行以下命令更新表数据: UPDATE sample_table set data = 'd' where id = 4; 执行以下命令删除数据: DELETE FROM sample_table where id = 5; 执行以下命令查询Iceberg表数据: select * from sample_table;
  • 基本语法 ALTER TABLE oldTableName RENAME TO newTableName; ALTER TABLE TableName SET TBLPROPERTIES; ALTER TABLE TableName ADD COLUMN; ALTER TABLE TableName RENAME COLUMN; ALTER TABLE TableName ALTER COLUMN; ALTER TABLE TableName DROP COLUMN; ALTER TABLE TableName ADD PARTITION FIELD; ALTER TABLE TableName DROP PARTITION FIELD; ALTER TABLE TableName REPLACE PARTITION FIELDALTER TABLE TableName WRITE ORDERED BY; 可空类型字段不能修改为非空类型字段, struct类型不支持修改字段。
  • 使用示例 修改表增加属性值: ALTER TABLE prod.db.sample SET TBLPROPERTIES ( 'comment' = 'A table comment.' ); 修改表增加表字段: ALTER TABLE prod.db.sample ADD COLUMNS ( new_column string comment 'new_column docs' ); 修改表重命名表字段: ALTER TABLE prod.db.sample RENAME COLUMN data TO payload; 修改表字段类型: ALTER TABLE prod.db.sample ALTER COLUMN measurement TYPE double; 修改表删除表字段: ALTER TABLE prod.db.sample DROP COLUMN id;
  • CREATE/DROP/SHOW VIRTUAL SCHEMA(S) CREATE HetuEngine中的CREATE语句用来创建SCHEMA映射,通过映射信息对外开放本域数据源。 语法如下: CREATE VIRTUAL SCHEMA [ IF NOT EXISTS ] [ ctlg_dest.]schema_name WITH ( [catalog = ctlg_name,] schema = schm_name, [property_name = expression, ...] ) 创建一个virtual schema,需要在WITH中提供具体映射的schema信息。 ctlg_dest为在哪个数据源创建virtual schema,参数可选,如果不指定则取当前Session中的catalog,如果当前Session中也未指定catalog则会创建失败。 WITH必选,schema参数必选,catalog参数可选(如果不指定则取当前Session中的catalog)。 样例语句: CREATE VIRTUAL SCHEMA hive_default WITH (catalog = 'hive', schema = 'default'); DROP HetuEngine中的DROP语句用来删除SCHEMA映射。 语法如下: DROP VIRTUAL SCHEMA [ IF EXISTS ] schema_name schema_name也可以替换为全限定名(catalogName.virtualSchema)。 样例语句: DROP VIRTUAL SCHEMA hive_default; SHOW HetuEngine中的SHOW语句用来查询所有SCHEMA映射。 语法如下: SHOW VIRTUAL SCHEMAS [ FROM catalog ] [ LIKE pattern ] 样例语句: SHOW VIRTUAL SCHEMAS;
  • 回答 场景一:(import场景)使用sqoop import命令抽取开源Postgre到MRS HDFS或Hive等。 问题现象: 使用sqoop命令查询postgre表可以,但是执行sqoop import命令倒数时报错: The authentication type 5 is not supported. Check that you have configured the pg_hba.conf file to include the client's IP address or subnet, and that it The authentication type 12 is not supported. Check that you have configured the pg_hba.conf file to include the client's IP address or subnet, and that it 问题根因: 报错中type为5时:在执行sqoop import命令时,会启动MapReduce任务,由于MRS Hadoop安装目录(${BIGDATA_HOME}/ FusionInsight _HD_*/1_*_NodeManager/install/hadoop/share/hadoop/common/lib)下自带了postgre驱动包gsjdbc4-*.jar,与开源Postgre服务不兼容导致报错。 报错中type为12时:数据库的pg_hba.conf文件配置有误。 解决方案: 报错中type为5时:在每台MRS NodeManager实例所在节点上移动驱动包“gsjdbc4-*.jar”到“tmp”目录下。 mv ${BIGDATA_HOME}/FusionInsight_HD_*/1_*_NodeManager/install/hadoop/share/hadoop/common/lib/gsjdbc4-*.jar /tmp 报错中type为12时:调整数据库的pg_hba.conf文件,将address改成Sqoop所在节点的IP。 场景二:(export场景)使用sqoop export命令抽取开源Postgre到MRS HDFS或Hive等。 问题现象: 使用sqoop命令查询postgre表可以,但是执行sqoop export命令倒数时报错: The authentication type 5 is not supported. Check that you have configured the pg_hba.conf file to include the client's IP address or subnet, and that it 问题根因: 在执行sqoop export命令时,会启动MapReduce任务,由于MRS Hadoop安装目录(${BIGDATA_HOME}/FusionInsight_HD_*/1_*_NodeManager/install/hadoop/share/hadoop/common/lib)下自带了postgre驱动包“gsjdbc4-*.jar”,与开源Postgre服务不兼容导致报错。 解决方案: 在每台MRS NodeManager实例所在节点上移动驱动包“gsjdbc4-*.jar”到“tmp”目录下。 mv ${BIGDATA_HOME}/FusionInsight_HD_*/1_*_NodeManager/install/hadoop/share/hadoop/common/lib/gsjdbc4-*.jar /tmp 将“/opt/client/Hive/Beeline/lib/gsjdbc4-*.jar”删除 。
  • 使用方法 在创建的Kafka Connector Source流表中,设置 'format' = 'drs-json'。 SQL示例如下: CREATE TABLE KafkaSource ( `user_id` VARCHAR, `user_name` VARCHAR, `age` INT) WITH ( 'connector' = 'kafka', 'topic' = 'test_source', 'properties.bootstrap.servers' = 'Kafka的Broker实例业务IP:Kafka端口号', 'properties.group.id' = 'testGroup', 'scan.startup.mode' = 'latest-offset', 'format' = 'drs-json', 'properties.sasl.kerberos.service.name' = 'kafka', 'properties.security.protocol' = 'SASL_PLAINTEXT', 'properties.kerberos.domain.name' = 'hadoop.系统 域名 ');CREATE TABLE printSink( `user_id` VARCHAR, `user_name` VARCHAR, `age` INT) WITH ( 'connector' = 'print');Insert into printSinkselect *from KafkaSource;
  • 解决方法 参考修改集群服务配置参数,进入HDFS“全部配置”页面,搜索并查看“dfs.namenode.name.dir”参数值获取NameNode数据目录,例如获取到数据目录为“/srv/BigData/namenode/current”。 在HDFS服务页面选择“实例”页签,查看并记录主备NameNode节点的业务IP地址。 以root用户登录发生故障的备NameNode节点,将1获取的数据目录中的fsimage文件进行备份。例如备份到“/srv/BigData/namenode/current.bak”路径下。 mv /srv/BigData/namenode/current/ /srv/BigData/namenode/current.bak 以root用户登录主NameNode节点,执行如下命令复制fsimage文件到备NameNode节点。 scp -rp /srv/BigData/namenode/current/ {备NameNode节点IP}:/srv/BigData/namenode/ chown omm:wheel /srv/BigData/namenode/current -R 重启备NameNode,观察是否重启成功。如果失败请联系技术支持进行处理。
  • 使用约束 由于Hudi OCC特性的限制,当前不建议多流并发写Hudi表。 如果需要多流同时写请将所有流union后写入Hudi。 支持添加新列并作为新分组,但是新列添加后,需要同时修改表属性的tblproperties和serdeproperties属性,将新列添加到新的组里面。命令示例如下: 添加新列col5,col6,group_3: alter table testTable add columns (col5 int, col6 int, group_3 int); 添加新的分组信息到tblproperties中: alter table testTable set tblproperties('fields.group_3.sequence-group' = 'col5,col6'); 添加新的分组信息到serdeproperties中: alter table testTable set serdeproperties('fields.group_3.sequence-group' = 'col5,col6'); sequence组包含的列不能有重叠。sequence-1组和sequence-2都包含col1这一列,这种是不支持的。 group列的数据类型,仅支持int、bigint、float、double、date和timestamp。 对于已存在表,如果要开启部分列更新功能;需要严格执行如下步骤,否则会出现数据不符合预期的情况。 停止待修改表的数据写入。 MOR表需要执行全量compaction: 强制开启compaction set hoodie.compaction.inline.max.delta.commits=1; set hoodie.compact.inline=true; 执行全量compaction run compaction on my_table; reset hoodie.compaction.inline.max.delta.commits; 添加新的分组信息到tblproperties中: alter table testTable set tblproperties('fields.group_1.sequence-group' = 'col1,col2'); 添加新的分组信息到serdeproperties中: alter table testTable set serdeproperties('fields.group_1.sequence-group' = 'col1,col2');
  • 场景说明 当前开源社区提供了PartialUpdateAvroPayload机制实现部分列更新,但该功能在多流更新,每条流更新不同列场景下会出现数据相互覆盖的问题。 通过引入sequence组的概念,Hudi可以很好的解决该问题,实现真正的部分更新。 按建表时按需求,将表中的列切分成不同的sequence组。每一个sequence组包含的列是否更新,由该sequence组的precombine字段决定,不同sequence组相互不影响。
  • 操作场景 在FE的自定义配置项中添加“enable_col_auth”参数开启列授权后,Doris支持对列级别权限的管理。 该特性仅MRS 3.3.1及之后版本支持。 表的列级别的授权仅支持Select_priv权限。 必须使用具有Grant_priv权限的用户进行列权限的管理操作。 被授予了列级别Select_priv权限的用户,如果执行select *查询表数据,结果只返回具有Select_priv权限的列。 被授予了列级别Select_priv权限的用户,如果执行desc tbl查询表的详细信息,结果只返回具有Select_priv权限的列。 支持视图和物化视图的列级别授权。
  • 使用场景样例 union写入模拟多表join(flink可以使用该功能完成流流join,实现数据拉宽)。 下列代码以SparkSQL示例, 通过Hudi将t1和t2 join拉宽操作转成union + insert,避免join的开销: create table if not exists t1(id INT,col1 INT,col2 INT) using parquet;insert into t1 values(1, 1, 1);create table if not exists t2(id INT,col3 INT,col4 INT) using parquet;insert into t2 values(1, 2, 2); create table if not exists joinTable(id INT,col1 INT,col2 INT,group_1 INT,col3 INT,col4 INT,group_2 INT) using huditblproperties (primaryKey = 'id',type = 'mor','hoodie.index.type' = 'BUCKET',hoodie.bucket.index.num.buckets=1,'hoodie.merge-engine' = 'partial-update','fields.group_1.sequence-group' = 'col1,col2','fields.group_2.sequence-group' = 'col3,col4');--- union + insert 模拟join操作insert into joinTableselect id, col1, col2, 1, null, null, null from t1 --- 取任意非空值充当col1,col2的precombine值union allselect id, null, null, null, col3, col4, 1 from t2; --- 取任意非空值充当col3,col4的precombine值--- 执行查询select id,col1,col2,col3,col4 from joinTable;-- 结果-- 1,1,1,2,2
  • UUID 标准UUID (Universally Unique IDentifier),也被称为GUID (Globally Unique IDentifier)。 遵从RFC 4122标准所定义的格式。 示例: select UUID '12151fd2-7586-11e9-8f9e-2a86e4085a59'; _col0-------------------------------------- 12151fd2-7586-11e9-8f9e-2a86e4085a59(1 row)
  • HYPERLOGLOG 基数统计。 用HyperLogLog来近似计算唯一数的计数值,其代价要远小于用count来计算。 参见HyperLogLog函数函数。 HyperLogLog A HyperLogLog sketch可以用来高效的计算distinct()的近似值。 它以一个稀疏的表征开始,然后变成一个密集的表征,此时效率将变得更高。 P4HyperLogLog 类似于A HyperLogLog sketch,但是它以一个密集的表征开始。
  • ROW ROW的字段可是任意所支持的数据类型,也支持各字段数据类型不同的混合方式。 --创建ROW表create table row_tb (id int,col1 row(a int,b varchar));--插入ROW类型数据insert into row_tb values (1,ROW(1,'HetuEngine'));--查询数据select * from row_tb; id | col1 ----|-------------- 1 | {a=1, b=HetuEngine} --字段是支持命名的,默认情况下,Row的字段是未命名的select row(1,2e0),CAST(ROW(1, 2e0) AS ROW(x BIGINT, y DOUBLE)); _col0 | _col1 ------------------------|-------------- {1, 2.0} | {x=1, y=2.0} (1 row) --命名后的字段,可以通过域操作符"."访问select col1.b from row_tb; -- HetuEngine--命名和未命名的字段,都可以通过位置索引来访问,位置索引从1开始,且必须是一个常量select col1[1] from row_tb; -- 1
  • IPADDRESS IP地址,可以表征IPv4或者IPv6地址。但在系统内,该类型是一个统一的IPv6地址。 对于IPv4的支持,是通过将IPv4映射到IPv6的取值范围(RFC 4291#section-2.5.5.2)来实现的。当创建一个IPv4时,会被映射到IPv6。当格式化时,如果数据是IPv4又会被重新映射为IPv4。 其他的地址则会按照RFC 5952所定义的规范格式来进行格式化。 示例: select IPADDRESS '10.0.0.1', IPADDRESS '2001:db8::1'; _col0 | _col1----------|------------- 10.0.0.1 | 2001:db8::1(1 row)
  • 布尔类型 “真”值的有效文本值是:TRUE、't'、'true'、'1'。 “假”值的有效文本值是:FALSE、'f'、'false'、'0'。 使用TRUE和FALSE是比较规范的用法(也是SQL兼容的用法)。 示例: select BOOLEAN '0'; _col0 ------- false (1 row) select BOOLEAN 'TRUE'; _col0 ------- true (1 row) select BOOLEAN 't'; _col0 ------- true (1 row)
  • 字符类型 名称 描述 VARCHAR(n) 变长字符串,n指字节长度。 CHAR(n) 定长字符串,不足补空格。n是指字节长度,如不带精度n,默认为1。 VARBINARY 变长二进制数据。需要带上前缀X,如:X'65683F',暂不支持指定长度的二进制字符串。 JSON 取值可以是a JSON object、a JSON array、a JSON number、a JSON string、true、false or null。 STRING 兼容impala的String,底层是varchar。 BINARY 兼容hive的Binary,底层实现为varbinary。 SQL表达式中,支持简单的字符表达式,也支持Unicode方式,一个Unicode字符串是以U&为固定前缀,以4位数值表示的Unicode前需要加转义符。 -- 字符表达式 select 'hello,winter!'; _col0 ------------------ hello,winter! (1 row) -- Unicode 表达式 select U&'Hello winter \2603 !'; _col0 ------------------ Hello winter ☃ ! (1 row) -- 自定义转义符 select U&'Hello winter #2603 !' UESCAPE '#'; _col0 ------------------ Hello winter ☃ ! (1 row) VARBINARY与BINARY。 -- 创建VARBINARY类型或BINARY类型的表 create table binary_tb(col1 BINARY);-- 插入数据 INSERT INTO binary_tb values (X'63683F');--查询数据 select * from binary_tb ; -- 63 68 3f 在做CHAR数值比较的时候,在对两个仅尾部空格数不同的CHAR进行比较时,会认为它们是相等的。 SELECT CAST('FO' AS CHAR(4)) = CAST('FO ' AS CHAR(5)); _col0 ------- true (1 row)
  • 时间和日期类型 时间和日期类型目前精确到毫秒。 表3 时间和日期类型 名称 描述 存储空间 DATE 日期和时间。仅支持ISO 8601格式:'2020-01-01' 32位 TIME 不带时区的时间(时、分、秒、毫秒) 例如:TIME '01:02:03.456' 64位 TIME WITH TIMEZONE 带时区的时间(时、分、秒、毫秒),时区用UTC值表示 例如:TIME '01:02:03.456 -08:00' 96位 TIMESTAMP 时间戳 64位 TIMESTAMP WITH TIMEZONE 带时区的时间戳 64位 INTERVAL YEAR TO MONTH 时间间隔字面量,年,月,格式: SY-M S:可选符号(+/-) Y:年数 M:月数 128位 INTERVAL DAY TO SECOND 时间间隔字面量,日,小时,分钟, 秒,精确到毫秒,格式:SD H:M:S.nnn S:可选符号(+/-) D:天数 M:分钟数 S:秒数 nnn:毫秒数 128位 示例: -- 查询日期SELECT DATE '2020-07-08'; _col0 ------------ 2020-07-08 (1 row)-- 查询时间SELECT TIME '23:10:15'; _col0 -------------- 23:10:15 (1 row)SELECT TIME '01:02:03.456 -08:00'; _col0 -------------- 01:02:03.456-08:00 (1 row)-- 时间间隔用法 SELECT TIMESTAMP '2015-10-18 23:00:15' + INTERVAL '3 12:15:4.111' DAY TO SECOND; _col0 ------------------------- 2015-10-22 11:15:19.111 (1 row)SELECT TIMESTAMP '2015-10-18 23:00:15' + INTERVAL '3-1' YEAR TO MONTH; _col0 ------------------------- 2018-11-18 23:00:15 (1 row)select INTERVAL '3' YEAR + INTERVAL '2' MONTH ; _col0 ------- 3-2 (1 row)select INTERVAL '1' DAY+INTERVAL '2' HOUR +INTERVAL '3' MINUTE +INTERVAL '4' SECOND ; _col0 ---------------- 1 02:03:04.000 (1 row)
  • 整数类型 表1 整数类型 名称 描述 存储空间 取值范围 字面量 TINYINT 微整数 8位 -128~127 TINYINT SMALLINT 小整数 16位 -32,768 ~ +32,767 SMALLINT INTEGER 整数 32位 -2,147,483,648 ~ +2,147,483,647 INT BIGINT 大整数 64位 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 BIGINT 示例: --创建具有TINYINT类型数据的表。 CREATE TABLE int_type_t1 (IT_COL1 TINYINT) ; --插入TINYINT类型数据 insert into int_type_t1 values (TINYINT'10'); --查看数据。 SELECT * FROM int_type_t1; it_col1 --------- 10 (1 row) --删除表。 DROP TABLE int_type_t1;
  • 固定精度型 名称 描述 存储空间 取值范围 字面量 DECIMAL 固定精度的十进制数。精度最高支持到38位,但精度小于18位能保障性能最好。 Decimal有两个输入参数: precision:总位数,默认38 scale:小数部分的位数,默认0 说明: 如果小数位为零,即十进制(38,0),则支持最高19位精度。 64位 DECIMAL NUMERIC 同DECIMAL 128位 NUMERIC 表2 字面量示例 字面量示例 数据类型 DECIMAL '0' DECIMAL(1) DECIMAL '12345' DECIMAL(5) DECIMAL '0000012345.1234500000' DECIMAL(20, 10) --创建具有DECIMAL类型数据的表CREATE TABLE decimal_t1 (dec_col1 DECIMAL(10,3)) ; --插入具有DECIMAL类型数据 insert into decimal_t1 values (DECIMAL '5.325'); --查看数据SELECT * FROM decimal_t1; dec_col1 --------- 5.325 (1 row) --反例:小数位数超出定义长度,sql执行失败insert into decimal_t1 values (DECIMAL '5.3253');Query 20201126_034601_00053_tq98i@default@HetuEngine failed: Insert query has mismatched column types: Table: [decimal(10,3)], Query: [decimal(5,4)]--删除表DROP TABLE decimal_t1; --创建NUMERIC 类型表CREATE TABLE tb_numberic_hetu(col1 NUMERIC(9,7));CREATE TABLE--插入数据INSERT INTO tb_numberic_hetu values(9.12);INSERT: 1 row--查看数据SELECT * FROM tb_numberic_hetu;col1 ------------ 9.1200000 (1 row)
  • 浮点型 名称 描述 存储空间 取值范围 字面量 REAL 实数 32位 1.40129846432481707e-45 ~3.40282346638528860e+38,正或负 REAL DOUBLE 双精度浮点数,15到17个有效位,具体取决于使用场景,有效位数并不取决于小数点位置 64位 4.94065645841246544e-324 ~1.79769313486231570e+308,正或负 DOUBLE FLOAT 单精度浮点数,6到9个有效位,具体取决于使用场景,有效位数并不取决于小数点位置 32位 1.40129846432481707e-45 ~3.40282346638528860e+38,正或负 FLOAT 用法说明: 分布式查询使用高性能硬件指令进行单精度或者双精度运算时,由于每次执行的顺序不一样,在调用聚合函数,比如SUM(),AVG(),特别是当数据规模非常大时,达到数千万甚至数十亿,其运算结果可能会略有不同。这种情况下,建议使用DECIMAL数据类型来运算。 可以使用别名来指定数据类型。 示例: --创建具有float类型数据的表CREATE TABLE float_t1 (float_col1 FLOAT) ;--插入具有float类型数据insert into float_t1 values (float '3.50282346638528862e+38');--查看数据SELECT * FROM float_t1;float_col1------------Infinity(1 row)--删除表DROP TABLE float_t1; 当小数部分为0时,可以通过cast()转为对应范围的整数处理,小数部分会四舍五入。 示例: select CAST(1000.0001 as INT);_col0-------1000(1 row)select CAST(122.5001 as TINYINT);_col0-------123(1 row) 使用指数表达式时,可以将字符串转为对应类型。 示例: select CAST(152e-3 as double);_col0-------0.152(1 row)
  • 操作步骤 假设存在如下一张表: user_data(user_group int, user_name string, update_time timestamp); 其中user_group是分区列,需要根据已有数据,按更新时间进行排序,刷新用户组信息。操作步骤如下: 在Hive Beeline命令行执行以下命令开启Hive动态分区: set hive.exec.dynamic.partition=true; set hive.exec.dynamic.partition.mode=nonstrict; 执行以下命令创建一个临时表,用于存储去重后的数据: CREATE TABLE temp_user_data AS SELECT * FROM ( SELECT *, ROW_NUMBER() OVER(PARTITION BY user_group ORDER BY update_time DESC) as rank FROM user_data ) tmp WHERE rank = 1; 执行以下命令使用临时数据作为数据源,并插入到目的表中: INSERT OVERWRITE TABLE user_data SELECT user_group, user_name, update_time FROM temp_user_data; 执行以下命令清理临时表: DROP TABLE IF EXISTS temp_user_data;
共100000条
提示

您即将访问非华为云网站,请注意账号财产安全