华为云用户手册

  • 回答 原因: Hudi表数据含有Decimal类型数据。 初始入库BULK_INSET方式会使用Spark内部parquet文件的写入类进行写入,Spark对不同精度的Decimal类型处理是不同的。 UPSERT操作时,Hudi使用Avro兼容的parquet文件写入类进行写入,这个和Spark的写入方式是不兼容的。 解决方案: 执行BULK_INSERT时指定设置“hoodie.datasource.write.row.writer.enable = false”,使hoodie采用Avro兼容的parquet文件写入类进行写入。
  • 操作场景 GaussDB MDE特性是指在使用HetuEngine服务向GaussDB写入数据时( CTS 和ITS语法),解除数据仅通过GaussDB的Coordinator流通的限制,使数据也可通过GaussDB的Worker节点流入GaussDB,减少GaussDB的Coordinator节点压力,并提升数据写入性能。 GaussDB MDE特性需要借助GaussDB的SQL On Hadoop能力,使用外部服务器作为数据传递的载体。HetuEngine目前仅支持使用HDFS外部服务器,并且该HDFS外部服务器需与HetuEngine服务在同一个Hadoop集群。 使用HetuEngine执行SQL向GaussDB写入数据,当前仅支持以下两类语法可通过GaussDB MDE特性进行性能提升: CREATE TABLE AS SELECT FROM hive INSERT INTO SELECT FROM hive 当前仅支持GaussDB(DWS) 8.0.0及以后版本
  • Schema演进支持范围 Schema演进支持范围: 支持列(包括嵌套列)相关的增、删、改、位置调整等操作。 不支持对分区列做演进。 不支持对Array类型的嵌套列进行增、删、列操作。 表1 引擎支持矩阵 引擎 DDL操作Schema 变更后的Hudi表写操作支持 变更后的Hudi表读操作支持 变更后Hudi表compaction支持 SparkSQL Y Y Y Y Flink N Y Y Y HetuEngine N N Y N Hive N N Y N 父主题: Hudi Schema演进
  • 示例 alter table h0 add columns(ext0 string);alter table h0 add columns(new_col int not null comment 'add new column' after col1);alter table complex_table add columns(col_struct.col_name string comment 'add new column to a struct col' after col_from_col_struct);
  • 回答 使用root用户登录安装客户端的节点。 执行以下命令,切换到客户端安装目录,例如“/opt/client”。 cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 根据集群认证模式,完成Hive客户端登录。 安全模式,则执行以下命令,完成用户认证并登录Hive客户端。 kinit 组件业务用户 beeline 普通模式,则执行以下命令,登录Hive客户端。 使用指定组件业务用户登录Hive客户端。 beeline -n 组件业务用户 不指定组件业务用户登录Hive客户端,则会以当前操作系统用户登录。 beeline 执行以下命令关闭客户端日志: set hive.server2.logging.operation.enabled=false; 执行以下命令查看客户端日志是否已关闭,如下图所示即为关闭成功。 set hive.server2.logging.operation.enabled;
  • 回答 由于Spark存在一个机制,为了提高性能会缓存ORC的元数据信息。当通过Hive或其他方式更新了ORC表时,缓存的元数据信息未更新,导致Spark SQL查询不到新插入的数据。 对于存储类型为ORC的Hive分区表,在执行插入数据操作后,如果分区信息未改变,则缓存的元数据信息未更新,导致Spark SQL查询不到新插入的数据。 解决措施: 在使用Spark SQL查询之前,需执行Refresh操作更新元数据信息: REFRESH TABLE table_name; table_name为刷新的表名,该表必须存在,否则会出错。 执行查询语句时,即可获取到最新插入的数据。 使用sqark时,执行以下命令禁用Spark优化: set spark.sql.hive.convertMetastoreOrc=false;
  • 操作示例 以Hive客户端安装用户登录安装客户端的节点。 执行以下命令,切换到客户端安装目录。 cd 客户端安装目录 例如安装目录为“/opt/client”,则执行以下命令: cd /opt/client 执行以下命令配置环境变量。 source bigdata_env 集群认证模式是否为安全模式。 是,执行以下命令进行用户认证: kinit Hive业务用户 否,执行5。 执行以下命令登录Hive客户端。 beeline 执行如下命令创建Hive分区表“table_1”,指定分区“pt='2021-12-12'”的路径为“hdfs//xxx”,指定分区“pt='2021-12-18'”的路径为“obs://xxx”: create table table_1(id string) partitioned by(pt string) [stored as [orc|textfile|parquet|...]]; alter table table_1 add partition(pt='2021-12-12') location 'hdfs://xxx'; alter table table_1 add partition(pt='2021-12-18') location 'obs://xxx'; 给分区表“table_1”中插入数据后,对应的分区数据存储在对应的存储源上,可以使用desc查看分区的location,执行以下命令查看路径下的数据: desc formatted table_1 partition(pt='2021-12-18');
  • 操作步骤 使用PuTTY,以omm用户登录主 OMS 节点,修改配置文件“${CONTROLLER_HOME}/etc/om/controller.properties”中参数“controller.backup.conf.script.execute.timeout”值为“10000000”(根据当前集群中的DBService数据量调大超时时间)。 使用PuTTY,以omm用户登录备OMS节点,重复1。 使用PuTTY,以omm用户登录主OMS节点,执行以下命令查询BackupRecoveryPluginProcess进程id,并结束此进程: jps|grep -i BackupRecoveryPluginProcess kill -9 查询到的pid 登录到Manager页面重新执行DBService备份任务。 执行以下命令查看BackupRecoveryPluginProcess进程是否已开启: jps|grep -i BackupRecoveryPluginProcess
  • 示例 insert into h0 select 1, 'a1', 20;-- insert static partitioninsert into h_p0 partition(dt = '2021-01-02') select 1, 'a1';-- insert dynamic partitioninsert into h_p0 select 1, 'a1', dt;-- insert dynamic partitioninsert into h_p1 select 1 as id, 'a1', '2021-01-03' as dt, '19' as hh;-- insert overwrite tableinsert overwrite table h0 select 1, 'a1', 20;-- insert overwrite table with static partitioninsert overwrite h_p0 partition(dt = '2021-01-02') select 1, 'a1';-- insert overwrite table with dynamic partitioninsert overwrite table h_p1 select 2 as id, 'a2', '2021-01-03' as dt, '19' as hh;
  • 注意事项 Insert模式:Hudi对于设置了主键的表支持三种Insert模式,用户可以设置参数hoodie.sql.insert.mode来指定Insert模式,默认为upsert。 strict模式,Insert 语句将保留 COW 表的主键唯一性约束,不允许重复记录。如果在插入过程中已经存在记录,则会为 COW 表抛出 HoodieDuplicateKeyException;对于MOR表,该模式与upsert模式行为一致。 non-strict模式,对主键表采用insert处理。 upsert模式,对于主键表的重复值进行更新操作。 在执行spark-sql时,用户可以设置“hoodie.sql.bulk.insert.enable = true”和“hoodie.sql.insert.mode = non-strict”来开启bulk insert作为Insert语句的写入方式。 也可以通过直接设置hoodie.datasource.write.operation的方式控制insert语句的写入方式,包括bulk_insert、insert、upsert。使用这种方式控制hoodie写入,需要注意执行完SQL后,必须执行reset hoodie.datasource.write.operation;重置Hudi的写入方式,否则该参数会影响其他SQL的执行。
  • 示例 merge into h0 as targetusing (select id, name, price, flag from s) sourceon target.id = source.idwhen matched then update set *when not matched then insert *;merge into h0using (select id, name, price, flag from s) sourceon h0.id = source.idwhen matched and flag != 'delete' then update set id = source.id, name = source.name, price = source.price * 2when matched and flag = 'delete' then deletewhen not matched then insert (id,name,price) values(source.id, source.name, source.price);merge into t0 as targetusing s0 sourceon target.id = source.idwhen matched then update set *when not matched then insert *;
  • 示例 示例1: delete from h0 where column1 = 'country'; 示例2: delete from h0 where column1 IN ('country1', 'country2'); 示例3: delete from h0 where column1 IN (select column11 from sourceTable2); 示例4: delete from h0 where column1 IN (select column11 from sourceTable2 where column1 = 'xxx'); 示例5: delete from h0;
  • 参数描述 表1 UPDATE参数 参数 描述 tableIdentifier 在其中执行MergeInto操作的Hudi表的名称。 target_alias 目标表的别名。 sub_query 子查询。 source_alias 源表或源表达式的别名。 merge_condition 将源表或表达式和目标表关联起来的条件 condition 过滤条件,可选。 matched_action 当满足条件时进行Delete或Update操作 not_matched_action 当不满足条件时进行Insert操作
  • 注意事项 merge-on condition当前只支持主键列。 当前仅支持对COW表进行部分字段的更新。参考: merge into h0 using s0on h0.id = s0.idwhen matched then update set h0.id = s0.id,price = s0.price * 2 当前仅支持对COW表进行更新时,目标表的字段出现在更新表达式的右值。参考: merge into h0 using s0on h0.id = s0.idwhen matched then update set id = s0.id,name = h0.name,price = s0.price + h0.price 如果针对部分字段进行更新,更新值必须包含主键列: 如下所示,Hudi表使用id和start_dt作为符合主键。 merge into hudi_test3 D using (select id,start_dt from tmp_tb2 where col2 in ('D', 'U')) Non (N.id = D.id and N.start_dt = D.start_dt)when matched then update setD.id = N.id,D.start_dt = N.start_dt,D.end_dt = '2022-04-28';
  • 参数描述 表1 CREATE TABLE参数描述 参数 描述 database_name Database名称,由字母、数字和下划线(_)组成。 table_name Database中的表名,由字母、数字和下划线(_)组成。 columnTypeList 以逗号分隔的带数据类型的列表。列名由字母、数字和下划线(_)组成。 using 参数hudi,定义和创建Hudi table。 table_comment 表的描述信息。 location_path HDFS路径,指定该路径Hudi 表会创建为外表。 options_list Hudi table属性列表。
  • 示例 创建非分区表 -- 创建一个cow内部表create table if not exists hudi_table0 (id int,name string,price double) using hudioptions (type = 'cow',primaryKey = 'id'); -- 创建一个mor外部表create table if not exists hudi_table1 (id int,name string,price double,ts bigint) using hudilocation '/tmp/hudi/hudi_table1'options (type = 'mor',primaryKey = 'id,name',preCombineField = 'ts'); 创建分区表 create table if not exists hudi_table_p0 (id bigint,name string,ts bigint,dt string,hh string) using hudilocation '/tmp/hudi/hudi_table_p0'options (type = 'cow',primaryKey = 'id',preCombineField = 'ts')partitioned by (dt, hh); 以SQL方式创建一个hudi表的外表,与spark-shell or deltastreamer方式创建的hudi外表相同 create table h_p1using hudioptions (primaryKey = 'id',preCombineField = 'ts')partitioned by (dt)location '/path/to/hudi';
  • 参数描述 表1 CREATE TABLE As SELECT参数描述 参数 描述 database_name Database名称,由字母、数字和下划线(_)组成。 table_name Database中的表名,由字母、数字和下划线(_)组成。 using 参数hudi,定义和创建Hudi table。 table_comment 表的描述信息。 location_path HDFS路径,指定该路径Hudi表会创建为外表。 options_list Hudi table属性列表。 query_statement select查询表达式
  • 示例 创建分区表 create table h2 using hudioptions (type = 'cow', primaryKey = 'id')partitioned by (dt)asselect 1 as id, 'a1' as name, 10 as price, 1000 as dt; 创建非分区表 create table h3 using hudiasselect 1 as id, 'a1' as name, 10 as price;从parquet表加载数据到hudi表# 创建parquet表create table parquet_mngd using parquet options(path=’hdfs:///tmp/parquet_dataset/*.parquet’);# CTAS创建hudi表create table hudi_tbl using hudi location 'hdfs:///tmp/hudi/hudi_tbl/' options (type = 'cow',primaryKey = 'id',preCombineField = 'ts')partitioned by (datestr) as select * from parquet_mngd;
  • Flink对接HDFS分区 Flink对接HDFS支持自定义分区。 Flink文件系统分区支持使用标准的Hive格式。不需要将分区预先注册到表目录中,分区是根据目录结构推断。 例如,根据下面的目录分区的表将被推断为包含日期时间和小时分区。 path└── datetime=2021-09-03 └── hour=11 ├── part-0.parquet ├── part-1.parquet └── hour=12 ├── part-0.parquet└── datetime=2021-09-24 └── hour=6 ├── part-0.parquet 分区文件的滚动策略。 分区目录中的数据被拆分为part文件,每个分区将至少包含一个part文件,用于接收sink的子任务的数据写入。 如下参数介绍分区文件如何进行滚动。 配置项 默认值 类型 描述 sink.rolling-policy.file-size 128MB MemorySize 分区文件达到该阈值后,进行滚动。 sink.rolling-policy.rollover-interval 30min Duration 分区文件在滚动前可以保持打开的最长持续时间。 sink.rolling-policy.check-interval 1min Duration 检查基于时间的滚动策略的时间间隔。 分区目录的文件合并。 支持文件压缩,允许应用程序具有更小的检查点间隔,而无需生成大量文件。 仅压缩单个检查点中的文件,即生成的文件数量至少与检查点数量相同。合并前的文件是不可见的,因此文件的可见性是:检查点间隔+压缩时间之后。如果压缩时间太长,将延长检查点的时间段。 配置项 默认值 类型 描述 auto-compaction false Boolean 是否启用自动压缩。数据将写入临时文件。检查点完成后,检查点生成的临时文件将被压缩。压缩前临时文件不可见。 compaction.file-size none MemorySize 压缩目标文件大小,默认值为滚动文件大小。 分区文件的提交。 文件写入分区后,通常需要通知下游应用程序。如将分区添加到Hive元存储中,或在目录中写入_SUC CES S文件。分区文件的提交操作基于触发器和策略的组合方式。 分区文件提交触发器相关配置 配置项 默认值 类型 描述 sink.partition-commit.trigger process-time String process-time:基于计算节点的系统时间,它既不需要分区时间提取,也不需要生成watermark。即“当前系统时间”超过“分区创建时的系统时间”加上“延迟”时间,就提交分区。 partition-time:基于从分区提取的时间,它需要生成watermark。即“watermark时间”超过“从分区提取的时间”加上“延迟”时间,就提交分区。 sink.partition-commit.delay 0 s Duration 分区在延迟时间之前不会提交。如果是每日分区,则应为“1 d”,如果是每小时分区,则应为“1 h”。 分区问文件提交策略相关配置 配置项 默认值 类型 描述 sink.partition-commit.policy.kind - String 提交分区的策略。 metastore:将分区添加到元存储。只有hive表支持元存储策略,文件系统通过目录结构管理分区。 success-file:将success-file文件添加到目录中。 两者可以同时配置,即:'sink.partition-commit.policy.kind'='metastore,success-file'。 sink.partition-commit.policy.class - String 用于实现分区提交策略接口的分区提交策略类。 仅在自定义提交策略中生效。 sink.partition-commit.success-file.name _SUCCESS String success-file分区提交策略的文件名,默认值为_SUCCESS。
  • 约束 支持在Hudi客户端执行Spark SQL操作Hudi。 支持在Spark2x的JD BCS erver中执行Spark SQL操作Hudi。 不支持在Spark2x的客户端执行Spark SQL操作Hudi。 不支持在Hive、Hetu引擎中写hudi表,以及修改hudi表结构,仅支持读。 由于SQL的KeyGenerator默认是org.apache.hudi.keygen.ComplexKeyGenerator,要求DataSource方式写入时KeyGenerator与SQL设置的一致。
  • 操作步骤 使用Ranger管理员用户rangeradmin登录Ranger管理页面,具体操作可参考登录Ranger管理界面。 在首页中单击“CDL”区域的组件插件名称,例如“CDL”。 单击“Add New Policy”,添加CDL权限控制策略。 根据业务需求配置相关参数。 表1 CDL权限参数 参数名称 描述 Policy Type Access。 Policy Conditions IP过滤策略,可自定义,配置当前策略适用的主机节点,可填写一个或多个IP或IP段,并且IP填写支持“*”通配符,例如:192.168.1.10,192.168.1.20或者192.168.1.*。 Policy Name 策略名称,可自定义,不能与本服务内其他策略名称重复。 Policy Label 为当前策略指定一个标签,您可以根据这些标签搜索报告和筛选策略。 job 配置当前策略适用的job名,可以填写多个值。这里支持通配符,例如:test、test*、*。 “Include”策略适用于当前输入的对象,“Exclude”表示策略适用于除去当前输入内容之外的其他对象。 Description 策略描述信息。 Audit Logging 是否审计此策略。 Allow Conditions 策略允许条件,配置本策略内允许的权限及例外,例外条件优先级高于正常条件。 在“Select Role”、“Select Group”、“Select User”列选择已创建好的需要授予权限的Role、用户组或用户。 单击“Add Conditions”,添加策略适用的IP地址范围,单击“Add Permissions”,添加对应权限。 Create: 创建权限。 Execute:执行权限。 Delete: 删除权限。 Update:更新权限。 Get:获取信息权限。 Select/Deselect All:全选/取消全选。 如需添加多条权限控制规则,可单击按钮添加。 如需当前条件中的用户或用户组管理本条策略,可勾选“Delegate Admin”,这些用户将成为受委托的管理员。被委托的管理员可以更新、删除本策略,它还可以基于原始策略创建子策略。 Deny Conditions 策略拒绝条件,配置本策略内拒绝的权限及例外,配置方法与“Allow Conditions”类型,拒绝条件的优先级高于“Allow Conditions”中配置的允许条件。 表2 设置权限 任务场景 角色授权操作 设置CDL管理员权限 在首页中单击“CDL”区域的组件插件名称,例如“CDL”。 分别选择“Policy Name”为“all - job”、“all - link”、“all - driver”、“all - env”的策略,单击按钮编辑策略。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Select/Deselect All”。 设置用户对CDL作业的所有管理权限 在“job”选择CDL作业名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Select/Deselect All”。 设置用户对CDL作业的创建权限 在“job”选择CDL作业名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Create”。 说明: 默认场景下,所有用户均具有“Create”权限。 设置用户对CDL作业的删除权限 在“job”选择CDL作业名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Delete”。 设置用户对CDL作业的信息获取权限 在“job”选择CDL作业名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Get”。 设置用户对CDL作业的执行权限 在“job”选择CDL作业名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Execute”。 设置用户对CDL数据连接的所有管理权限 在“link”右侧选择CDL数据连接名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Select/Deselect All”。 设置用户对CDL数据连接的创建权限 在“link”右侧选择CDL数据连接名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Create”。 说明: 默认场景下,所有用户均具有“Create”权限。 设置用户对CDL数据连接的删除权限 在“link”右侧选择CDL数据连接名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Delete”。 设置用户对CDL数据连接的更新权限 在“link”右侧选择CDL数据连接名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Update”。 设置用户对CDL数据连接的信息获取权限 在“link”右侧选择CDL数据连接名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Get”。 设置用户对CDL驱动的所有管理权限 在“driver”右侧选择CDL驱动名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Select/Deselect All”。 设置用户对CDL驱动的删除权限 在“driver”右侧选择CDL驱动名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Delete”。 设置用户对CDL驱动的更新权限 在“driver”右侧选择CDL驱动名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Update”。 设置用户对CDL驱动的信息获取权限 在“driver”右侧选择CDL驱动名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Get”。 设置用户对CDL环境变量的所有管理权限 在“env”右侧选择CDL环境变量名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Select/Deselect All”。 设置用户对CDL环境变量的创建权限 在“env”右侧选择CDL环境变量名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Create”。 说明: 默认场景下,所有用户均具有“Create”权限。 设置用户对CDL环境变量的删除权限 在“env”右侧选择CDL环境变量名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Delete”。 设置用户对CDL环境变量的更新权限 在“env”右侧选择CDL环境变量名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Update”。 设置用户对CDL环境变量的信息获取权限 在“env”右侧选择CDL环境变量名。 在“Allow Conditions”区域,单击“Select User”下选择框选择用户。 单击“Add Permissions”,勾选“Get”。 (可选)添加策略有效期。在页面右上角单击“Add Validity period”,设置“Start Time”和“End Time”,选择“Time Zone”。单击“Save”保存。如需添加多条策略有效期,可单击按钮添加。如需删除策略有效期,可单击按钮删除。 单击“Add”,在策略列表可查看策略的基本信息。等待策略生效后,验证相关权限是否正常。 如需禁用某条策略,可单击按钮编辑策略,设置策略开关为“Disabled”。 如果不再使用策略,可单击按钮删除策略。
  • 操作场景 在使用CDL服务前,需集群管理员创建用户并指定其操作权限以满足业务使用需求。 CDL用户分为管理员用户和普通用户,系统默认的CDL管理员用户组为“cdladmin”,CDL普通用户对应用户组为“cdl”。 关联了“cdladmin”用户组的用户可以执行CDL的任何操作。 关联了“cdl”用户组的用户可以执行CDL的创建和查询操作。 启用了Ranger鉴权时,如果用户创建后需要继续为用户配置创建、执行、查询、删除权限,请参考添加CDL的Ranger访问权限策略。 对于手动停用了Ranger鉴权的集群,可参考启用Ranger鉴权章节重新启用Ranger鉴权。 该章节内容仅适用于开启了Kerberos认证的集群。
  • UDF java代码及SQL样例 UDF java使用样例 package com.xxx.udf;import org.apache.flink.table.functions.ScalarFunction;public class UdfClass_UDF extends ScalarFunction { public int eval(String s) { return s.length(); }} UDF SQL使用样例 CREATE TEMPORARY FUNCTION udf as 'com.xxx.udf.UdfClass_UDF';CREATE TABLE udfSource (a VARCHAR) WITH ('connector' = 'datagen','rows-per-second'='1');CREATE TABLE udfSink (a VARCHAR,b int) WITH ('connector' = 'print');INSERT INTO udfSinkSELECT a, udf(a)FROM udfSource;
  • 使用示例 --给表t1增加列test01 ALTER TABLE t1 ADD COLUMN test01 String DEFAULT 'defaultvalue';--查询修改后的表t1desc t1┌─name────┬─type─┬─default_type─┬─default_expression ┬─comment─┬─codec_expression─┬─ttl_expression─┐│ id │ UInt8 │ │ │ │ │ │ │ name │ String │ │ │ │ │ │ │ address │ String │ │ │ │ │ ││ test01 │ String │ DEFAULT │ 'defaultvalue' │ │ │ │└───────┴────┴────────┴────────── ┴───── ┴──────────┴─────────┘--修改表t1列name类型为UInt8ALTER TABLE t1 MODIFY COLUMN name UInt8;--查询修改后的表t1desc t1┌─name────┬─type─┬─default_type─┬─default_expression ┬─comment─┬─codec_expression─┬─ttl_expression─┐│ id │ UInt8 │ │ │ │ │ │ │ name │ UInt8 │ │ │ │ │ │ │ address │ String │ │ │ │ │ ││ test01 │ String │ DEFAULT │ 'defaultvalue' │ │ │ │└───────┴────┴────────┴────────── ┴───── ┴──────────┴─────────┘--删除表t1的列test01ALTER TABLE t1 DROP COLUMN test01;--查询修改后的表t1desc t1┌─name────┬─type─┬─default_type─┬─default_expression ┬─comment─┬─codec_expression─┬─ttl_expression─┐│ id │ UInt8 │ │ │ │ │ │ │ name │ UInt8 │ │ │ │ │ │ │ address │ String │ │ │ │ │ │└───────┴────┴────────┴────────── ┴───── ┴──────────┴─────────┘
  • 使用示例 --查看ClickHouse集群信息select * from system.clusters;--显示当前节点设置的宏select * from system.macros;--查看数据库容量selectsum(rows) as "总行数",formatReadableSize(sum(data_uncompressed_bytes)) as "原始大小",formatReadableSize(sum(data_compressed_bytes)) as "压缩大小",round(sum(data_compressed_bytes) / sum(data_uncompressed_bytes) * 100,0) "压缩率"from system.parts;--查询test表容量。where条件根据实际情况添加修改selectsum(rows) as "总行数",formatReadableSize(sum(data_uncompressed_bytes)) as "原始大小",formatReadableSize(sum(data_compressed_bytes)) as "压缩大小",round(sum(data_compressed_bytes) / sum(data_uncompressed_bytes) * 100,0) "压缩率"from system.partswhere table in ('test')and partition like '2020-11-%'group by table;
  • 上传UDF 访问Flink WebUI,请参考访问Flink WebUI。 单击“UDF管理”进入UDF管理页面。 单击“添加UDF”,在“本地Jar文件”参数后选择并上传本地已准备好的UDF jar文件。 填写UDF名称以及描述信息后,单击“确定”。 “UDF名称”最多可添加10项,“名称”可自定义,“类名”需与上传的UDF jar文件中UDF函数全限定类名一一对应。 上传UDF jar文件后,服务器默认保留5分钟,5分钟内单击确定则完成UDF创建,超时后单击确定则创建UDF失败并弹出错误提示:本地UDF文件路径有误。 在UDF列表中,可查看当前应用内所有的UDF信息。可在对应UDF信息的“操作”列编辑或删除UDF信息(只能删除未被使用的UDF项)。 (可选)如果需要立即运行或开发作业,可在“作业管理”进行相关作业配置,可参考创建作业。
  • 使用示例 --查询表t1的表结构desc t1;┌─name────┬─type─┬─default_type─┬─default_expression ┬─comment─┬─codec_expression─┬─ttl_expression─┐│ id │ UInt8 │ │ │ │ │ │ │ name │ UInt8 │ │ │ │ │ │ │ address │ String │ │ │ │ │ │└───────┴────┴────────┴────────── ┴───── ┴──────────┴─────────┘
  • 使用示例 --删除表t1drop table t1 SYNC; 在删除复制表时,因为复制表需要在Zookeeper上建立一个路径,存放相关数据。ClickHouse默认的库引擎是原子数据库引擎,删除Atomic数据库中的表后,它不会立即删除,而是会在480秒后删除。在删除表时,加上SYNC字段,即可解决该问题,例如:drop table t1 SYNC; 删除本地表和分布式表,则不会出现该问题,可不带SYNC字段,例如:drop table t1;
  • 基本语法 方法一:在指定的“database_name”数据库中创建一个名为“table_name ”的表。 如果建表语句中没有包含“database_name”,则默认使用客户端登录时选择的数据库作为数据库名称。 CREATE TABLE [IF NOT EXISTS] [database_name.]table_name [ON CLUSTER ClickHouse集群名] ( name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1], name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2], ... ) ENGINE = engine_name() [PARTITION BY expr_list] [ORDER BY expr_list] ClickHouse在创建表时建议携带PARTITION BY创建表分区。因为ClickHouse数据迁移工具是基于表的分区作数据迁移,在创建表时如果不携带PARTITION BY创建表分区,则在使用ClickHouse数据迁移工具界面无法对该表进行数据迁移。 方法二:创建一个与database_name2.table_name2具有相同结构的表,同时可以对其指定不同的表引擎声明。 如果没有表引擎声明,则创建的表将与database_name2.table_name2使用相同的表引擎。 CREATE TABLE [IF NOT EXISTS] [database_name.]table_name AS [database_name2.]table_name2 [ENGINE = engine_name] 方法三:使用指定的引擎创建一个与SELECT子句的结果具有相同结构的表,并使用SELECT子句的结果填充它。 CREATE TABLE [IF NOT EXISTS] [database_name.]table_name ENGINE = engine_name AS SELECT ...
  • 使用示例 --在default数据库和default_cluster集群下创建名为test表CREATE TABLE default.test ON CLUSTER default_cluster( `EventDate` DateTime, `id` UInt64)ENGINE = ReplicatedMergeTree('/clickhouse/tables/{shard}/default/test', '{replica}')PARTITION BY toYYYYMM(EventDate)ORDER BY id
共100000条