华为云用户手册

  • autovacuum_max_workers 参数说明:设置能同时运行的自动清理线程的最大数量,该参数的取值上限与max_connections和job_queue_processes大小有关。 参数类型:SIGHUP 取值范围:整型 最小值为0,表示不会自动进行autovacuum。 理论最大值为262143,实际最大值为动态值。计算公式为“262143 - max_inner_tool_connections - max_connections - job_queue_processes - 辅助线程数 – autovacuum的launcher线程数 - 1”,其中辅助线程数和autovacuum的launcher线程数由两个宏来指定,当前版本的默认值分别为20和2。 默认值:4
  • 注意事项 如果需要删除表上的所有数据,建议使用TRUNCATE语法,可以有效提高性能同时减少空间膨胀。 HStore表上的单条DELETE操作,会往Delta中插入一条type是D的记录,同时在更新内存更新链用于管理并发。 HStore表上的批量DELETE操作,对于每个CU上的连续DELETE,会插入一条type是D的记录。 对于并发DELETE场景, 传统列存储格式由于同时操作相同CU时会阻塞所以并发性能较差, 对于HStore表由于不需要阻塞等待,并发DELETE性能可达到列存的百倍以上。 语法完全兼容列存,更多信息可以参考UPDATE语法。
  • 示例 创建表reason_t2: 1 2 3 4 5 6 7 CREATE TABLE reason_t2 ( TABLE_SK INTEGER , TABLE_ID VARCHAR(20) , TABLE_NA VARCHAR(20) )WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON); INSERT INTO reason_t2 VALUES (1, 'S01', 'StudentA'),(2, 'T01', 'TeacherA'),(3, 'T02', 'TeacherB'); 使用WHERE条件删除: 1 2 DELETE FROM reason_t2 WHERE TABLE_SK = 2; DELETE FROM reason_t2 AS rt2 WHERE rt2.TABLE_SK = 2; 使用IN语法删除: 1 DELETE FROM reason_t2 WHERE TABLE_SK in (1,3);
  • 行存、列存、HStore表对比 表2 行存、列存、HStore表对比 表类型 行存表 列存表 HStore表 数据存储方式 以元组为单位,将每一条数据的所有属性值存储到临近的空间里。 以CU(Compress Unit)为单位,将单个属性的所有值存储到临近的空间里。 数据主要以CU形式存储在列存主表上,对于被更新的列、小批量插入的数据将被序列化后存储到新设计的Delta表上。 数据写入 行存压缩暂未商用,数据按原始状态存储,磁盘空间占用较大。 按列存储时,由于属性值类型相同具有天然的压缩优势。数据写入时能极大节省IO资源与磁盘空间占用。 批量插入的数据直接写入CU,具有与列存一致的压缩优势。 被更新的列、小批量插入的数据会序列化后压缩。同时定期merge到主表CU。 数据更新 数据按行更新,没有CU锁问题,并发更新(update/upsert/delete等)性能好。 即使更新单条数据,也要获取整个CU的锁,基本无法支持并发更新(update/upsert/delete等)。 彻底解决列存更新的CU锁问题,并发更新(update/upsert/delete等)的性能达到行存的60%以上。 数据读取 按行读取,即使只需访问某一列的数据,也需要将一整行的数据取出。查询性能较差。 按列读取时只需访问该列的CU,再加上CU的压缩优势导致需要占用的IO资源更少,读取性能很好。 对于列存主表的数据按列读取,对于被更新的列、小批量插入的数据会反序列化后取出,数据merge到主表后具有与列存一致的数据读取优势。 优点 并发更新性能好。 查询性能好,磁盘占用空间少。 并发更新性能好,数据MERGE后具有与列存一致的查询性能优势与压缩优势。 缺点 占用磁盘空间多,查询性能差。 基本无法支持并发更新。 需要后台常驻线程对HStore表进行merge清理操作。先merge到CU主表再进行清理,与SQL语法中的Merge无关。 适用场景 更新删除操作频繁的TP事务场景。 点查询(基于索引的、返回数据量小的简单查询)。 查询分析为主的AP场景。 数据量大,存入后的更新删除操作少。 实时并发入库场景。 需要支持高并发的更新入库操作以及高性能的查询效率。
  • 技术特点 完整的事务一致性 体现在数据插入或者更新后提交即可见,不存在时延;并发更新后数据保证强一致,不会出现乱序导致的结果预期不一致。 查询性能好 多表关联等复杂AP查询场景下,更完善的分布式查询计划与分布式执行器带来的性能优势,支持复杂的子查询和存储过程。 入库快 彻底解决列存CU锁冲突问题,支持高并发的更新入库操作,典型场景下,并发更新性能是之前的百倍以上。 高压缩 数据在MERGE进入列存主表后,按列存储具有天然的压缩优势,能极大地节省磁盘空间与IO资源。 查询加速 支持主键等传统索引能力去重和加速点查,也支持分区、多维字典、局部排序等方式进一步加速AP查询。
  • 与标准数仓的区别 实时数仓与标准数仓是 GaussDB (DWS)的两种不同类型产品,在使用上也存在一定差异,具体可参考表1进行对比分析。 表1 实时数仓与标准数仓的差异 数仓类型 标准数仓 实时数仓 适用场景 融合分析业务,一体化OLAP分析场景。主要应用于金融、政企、电商、能源等领域。 实时入库+分析混合业务,上游数据实时入库+数据入库后实时高效查询场景。主要用于电商、金融等实时入库要求高的场景。 产品优势 性价比高,使用场景广泛。 支持冷热数据分析,存储、计算弹性伸缩,无限算力、无限容量等。 混合负载,入库性能强。 提供与列存相当的高性能查询效率与高压缩率的数据压缩能力。同时拥有处理传统TP场景的事务能力。 功能特点 支持海量数据离线处理和交互查询,数据规模大、复杂数据挖掘具有很好的性能优势。 支持海量数据高并发的更新操作入库以及高性能的查询效率。在数据规模大、入库并发高、查询要求高的场景下具有很好的性能优势。 SQL语法 SQL语法兼容性高,语法通用,易于使用。 兼容列存语法。 GUC参数 丰富的GUC参数,根据客户业务场景适配最适合客户的数仓环境。 兼容标准数仓GUC参数,同时支持实时数仓调优参数。
  • 示例 创建简单的HStore表: CREATE TABLE warehouse_t1 ( W_WAREHOUSE_SK INTEGER NOT NULL, W_WAREHOUSE_ID CHAR(16) NOT NULL, W_WAREHOUSE_NAME VARCHAR(20) , W_WAREHOUSE_SQ_FT INTEGER , W_STREET_NUMBER CHAR(10) , W_STREET_NAME VARCHAR(60) , W_STREET_TYPE CHAR(15) , W_SUITE_NUMBER CHAR(10) , W_CITY VARCHAR(60) , W_COUNTY VARCHAR(30) , W_STATE CHAR(2) , W_ZIP CHAR(10) , W_COUNTRY VARCHAR(20) , W_GMT_OFFSET DECIMAL(5,2) )WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON); CREATE TABLE warehouse_t2 (LIKE warehouse_t1 INCLUDING ALL);
  • 列存表的Delta表差异 表1 HStore表与列存表的辅助Delta表差异 数仓类型 列存的delta表 HStore的delta表 表结构 与列存主表的表定义一致。 与主表定义不一致。 功能 用于暂存小批量insert的数据,满阈值后再merge到主表,避免直接insert到主表产生大量小CU。 用于持久化存储update/delete/insert信息。在故障拉起后用于恢复内存更新链等管理并发更新的内存结构。 缺陷 来不及merge导致delta表膨胀,影响查询性能,同时无法解决并发update的锁冲突问题。 依赖后台常驻autovacuum来做merge操作。
  • 参数说明 IF NOT EXISTS 指定IF NOT EXISTS时,若不存在同名表,则可以成功创建表。若已存在同名表,创建时不会报错,仅会提示该表已存在并跳过创建。 table_name 要创建的表名。 表名长度不超过63个字符,以字母或下划线开头,可包含字母、数字、下划线、$、#。 column_name 新表中要创建的字段名。 字段名长度不超过63个字符,以字母或下划线开头,可包含字母、数字、下划线、$、#。 data_type 字段的数据类型。 LIKE source_table [ like_option ... ] LIKE子句声明一个表,新表自动从这个表中继承所有字段名及其数据类型。 新表与原表之间在创建动作完毕之后是完全无关的。在原表做的任何修改都不会传播到新表中,并且也不可能在扫描原表的时候包含新表的数据。 被复制的列并不使用相同的名字进行融合。如果明确的指定了相同的名字或者在另外一个LIKE子句中,将会报错。 HStore表只能从HStore表中进行继承。 WITH ( { storage_parameter = value } [, ... ] ) 这个子句为表指定一个可选的存储参数。 ORIENTATION 指定表数据的存储方式,即时序方式、行存方式、列存方式,该参数设置成功后就不再支持修改。对于HStore表,应当使用列存方式,同时设置enable_hstore为on。 取值范围: TIMESERIES,表示表的数据将以时序方式存储。 COLUMN,表示表的数据将以列存方式存储。 ROW,表示表的数据将以行方式存储。 默认值:ROW。 COMPRESSION 指定表数据的压缩级别,它决定了表数据的压缩比以及压缩时间。一般来讲,压缩级别越高,压缩比也越大,压缩时间也越长;反之亦然。实际压缩比取决于加载的表数据的分布特征。 取值范围: HStore表和列存表的有效值为YES/NO和/LOW/MIDDLE/HIGH,默认值为LOW。当设置为YES时,压缩级别默认为LOW。 暂不支持行存表压缩功能。 ORC格式迁移到GaussDB(DWS)列存表,如果使用low级别压缩,单副本大小大约是ORC的1.5~2倍;如果使用high级别压缩,单副本大小基本与ORC持平,在新建GaussDB(DWS)集群规模时,需考虑该转换关系。 列存middle压缩固定使用字典压缩,对于数据特征不适合字典压缩的数据,使用middle压缩的结果可能比low压缩更大。 GaussDB(DWS)内部提供如下压缩算法。 表2 列存压缩算法 COMPRESSION NUMERIC STRING INT LOW delta压缩+RLE压缩 lz4压缩 delta压缩(RLE可选) MIDDLE delta压缩+RLE压缩+lz4压缩 dict压缩或lz4压缩 delta压缩或lz4压缩(RLE可选) HIGH delta压缩+RLE压缩+zlib压缩 dict压缩或zlib压缩 delta压缩或zlib压缩(RLE可选) COMPRESSLEVEL 指定表数据同一压缩级别下的不同压缩水平,它决定了同一压缩级别下表数据的压缩比以及压缩时间。对同一压缩级别进行了更加详细的划分,为用户选择压缩比和压缩时间提供了更多的空间。总体来讲,此值越大,表示同一压缩级别下压缩比越大,压缩时间越长;反之亦然。该参数只对时序表和列存表有效。 取值范围:0~3 默认值:0 MAX_BATCHROW 指定了在数据加载过程中一个存储单元可以容纳记录的最大数目。该参数只对时序表和列存表有效。 取值范围:10000~60000 默认值60000 PARTIAL_CLUSTER_ROWS 指定了在数据加载过程中进行将局部聚簇存储的记录数目。该参数只对时序表和列存表有效。 取值范围:600000~2147483647 enable_delta 指定了在列存表是否开启delta表。对HStore表不能开启该参数。 默认值:off enable_hstore 指定了是否创建为HStore表(基于列存表实现)。该参数只对列存表有效。该参数仅8.2.0.100及以上集群版本支持。 默认值:off 打开该参数时必须设置以下GUC参数用于保证HStore表的清理,推荐值如下: autovacuum=true,autovacuum_max_workers=6,autovacuum_max_workers_hstore=3。 enable_disaster_cstore 指定了列存表是否开启细粒度容灾功能。该参数仅适用于COLVERSION为2.0的列存表,并且不能和enable_hstore同时打开。该参数仅8.2.0.100及以上集群版本支持。 默认值:off 设置该参数为on前需要先设置GUC参数enable_metadata_tracking=on,否则可能开启细粒度容灾功能失败。 SUB_PARTITION_COUNT 指定二级分区的个数。该参数用于设置在导入阶段二级分区个数。在建表时进行设置,建表后不支持修改。不建议用户随意设置该默认值,可能会影响导入和查询的性能。 取值范围:1~1024 默认值:32 DELTAROW_THRESHOLD 指定HStore表导入时小于多少行(SUB_PARTITION_COUNT * DELTAROW_THRESHOLD)的数据进入delta表。 取值范围:0~60000 默认值为60000 COLVERSION 指定存储格式的版本。 HStore表只支持2.0版本。 取值范围: 1.0:列存表的每列以一个单独的文件进行存储,文件名以relfilenode.C1.0、relfilenode.C2.0、relfilenode.C3.0等命名。 2.0:列存表的每列合并存储在一个文件中,文件名以relfilenode.C1.0命名。 默认值:2.0 secondary_part_column 指定列存表二级分区列的列名,仅能指定一列作为二级分区列且只适用于HStore列存表。该参数仅8.3.0及以上集群版本支持。 被指定为二级分区的列不能被删除或者修改。 只能在建表时指定二级分区列,建表后不支持修改。 不建议指定分布列作为二级分区列。 指定二级分区列后,该表将会在DN上按照二级分区列进行逻辑上的HASH分区存储,从而有效提升该列等值查询的性能。 secondary_part_num 指定列存表二级分区的数量,仅适用于HStore列存表。该参数仅8.3.0及以上集群版本支持。 取值范围:1~32 默认值:8 只有secondary_part_column被指定时,该参数才可以指定。 只能在建表时指定二级分区的数量,建表后不支持修改。 不建议用户随意设置该默认值,否则会影响导入和查询的性能。 DISTRIBUTE BY 指定表如何在节点之间分布或者复制。 取值范围: HASH (column_name ) :对指定的列进行Hash,通过映射,把数据分布到指定DN。 TO { GROUP groupname | NODE ( nodename [, ... ] ) } TO GROUP指定创建表所在的Node Group,目前不支持hdfs表使用。TO NODE主要供内部扩容工具使用,一般用户不应该使用。 PARTITION BY 指定HStore表的初始分区。
  • 注意事项 创建HStore表的用户需要拥有schema cstore的USAGE权限。 表级参数enable_delta与enable_hstore无法同时开启,因为enable_delta用于控制普通列存表的delta开启,会与enable_hstore冲突。 每一个HStore表绑定一张delta表,delta表的oid记录在pg_class中reldeltaidx字段(reldelta字段被列存表的delta表使用)。
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE [ IF NOT EXISTS ] table_name ({ column_name data_type | LIKE source_table [like_option [...] ] } } [, ... ]) [ WITH ( {storage_parameter = value} [, ... ] ) ] [ TABLESPACE tablespace_name ] [ DISTRIBUTE BY HASH ( column_name [,...])] [ TO { GROUP groupname | NODE ( nodename [, ... ] ) } ] [ PARTITION BY { {RANGE (partition_key) ( partition_less_than_item [, ... ] )} } [ { ENABLE | DISABLE } ROW MOVEMENT ] ]; 其中like选项like_option为: { INCLUDING | EXCLUDING } { DEFAULTS | CONSTRAINTS | INDEXES | STORAGE | COMMENTS | PARTITION | RELOPTIONS | DISTRIBUTION | ALL }
  • hstore_full_merge(rel_name text,partitionName text) 描述:该函数用于手动对HStore表进行全量清理操作。其中第二个入参为可选参数,用于指定单分区进行操作。 返回值类型:int 执行该操作会强制将DELTA表上的所有可见操作Merge到主表,然后建一张新的空Delta表, 期间持有该表的八级锁。 该操作的耗时长度与DELTA表上的数据量有关,务必打开HStore的清理线程,确保HStore表的及时清理。 仅在8.3.0.100及以上集群版本支持第二个可选参数partitionName,因此8.3.0.100及以上集群版本不支持使用call调用此函数(call不支持重载)。 示例: 1 2 SELECT hstore_full_merge('reason_select'); SELECT hstore_full_merge('reason_select','part1');
  • pgxc_get_hstore_delta_info(rel_name text) 描述:该函数用于获取目标表的delta表信息,包括delta表的大小,insert/delete/update各种类型记录的数量等。该函数仅8.2.1.100及以上集群版本支持。 返回值类型:record 返回值: node_name:DN节点名。 part_name:分区名,非分区表此列为non partition table。 live_tup:存活的元组数量。 n_ui_type:type 是 ui (小cu合并和upsert走update插入) 的记录的数量。一条ui记录表示一次插入,可以是单插或者批插。该参数仅8.3.0.100及以上版本支持。 n_i_type:type 是 i (insert) 的记录的数量。一条i记录表示一次插入,可以是单插或者批插。 n_d_type:type 是 d (delete) 的记录的数量。一条d记录表示一次删除,可以是单条删或者批量删除。 n_x_type:type 是 x (由update产生的delete) 记录的数量。 n_u_type:type 是 u (轻量化update) 的记录数量。 n_m_type:type 是 m (merge) 的记录数量。 data_size:表的大小。 示例: 1 2 3 4 5 6 7 SELECT * FROM pgxc_get_hstore_delta_info('hs_part'); node_name | part_name | live_tup | n_ui_type | n_i_type | n_d_type | n_x_type | n_u_type | n_m_type | data_size -----------+-----------+----------+-----------+----------+----------+----------+----------+----------+----------- dn_1 | p1 | 2 | 0 | 2 | 0 | 0 | 0 | 0 | 8192 dn_1 | p2 | 2 | 0 | 2 | 0 | 0 | 0 | 0 | 8192 dn_1 | p3 | 2 | 0 | 2 | 0 | 0 | 0 | 0 | 8192 (3 rows)
  • 参数说明 INTO子句 指定正在更新或插入的目标表。 table_name 目标表的表名。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 USING子句 指定源表,源表可以为表、视图或子查询。 ON子句 关联条件,用于指定目标表和源表的关联条件。不支持更新关联条件中的字段。ON关联条件可以是ctid,xc_node_id,tableoid这三个系统列。 WHEN MATCHED子句 当源表和目标表中数据针对关联条件可以匹配上时,选择WHEN MATCHED子句进行UPDATE操作。 不支持更新分布列、系统表以及系统列。 WHEN NOT MATCHED子句 当源表和目标表中数据针对关联条件无法匹配时,选择WHEN NOT MATCHED子句进行INSERT操作。 不支持INSERT子句中包含多个VALUES。 WHEN MATCHED和WHEN NOT MATCHED子句顺序可以交换,可以缺省其中一个,但不能同时缺省。 不支持同时指定两个WHEN MATCHED或WHEN NOT MATCHED子句。
  • 示例 创建进行MERGE INTO的目标: 1 2 CREATE TABLE target(a int, b int)WITH(ORIENTATION = COLUMN, ENABLE_HSTORE = ON); INSERT INTO target VALUES(1, 1),(2, 2); 创建数据源表: 1 2 CREATE TABLE source(a int, b int)WITH(ORIENTATION = COLUMN, ENABLE_HSTORE = ON); INSERT INTO source VALUES(1, 1),(2, 2),(3, 3),(4, 4),(5, 5); 执行MERGE INTO操作: 1 2 3 4 5 6 7 MERGE INTO target t USING source s ON (t.a = s.a) WHEN MATCHED THEN UPDATE SET t.b = t.b + 1 WHEN NOT MATCHED THEN INSERT VALUES (s.a, s.b) WHERE s.b % 2 = 0;
  • 语法格式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 MERGE INTO table_name [ [ AS ] alias ] USING { { table_name | view_name } | subquery } [ [ AS ] alias ] ON ( condition ) [ WHEN MATCHED THEN UPDATE SET { column_name = { expression | DEFAULT } | ( column_name [, ...] ) = ( { expression | DEFAULT } [, ...] ) } [, ...] [ WHERE condition ] ] [ WHEN NOT MATCHED THEN INSERT { DEFAULT VALUES | [ ( column_name [, ...] ) ] VALUES ( { expression | DEFAULT } [, ...] ) [, ...] [ WHERE condition ] } ];
  • 参数说明 plan_hint子句 以/*+ */的形式在关键字后,用于对指定语句块生成的计划进行hint调优,详细用法请参见使用Plan Hint进行调优 table_name 要更新的表名,可以使用模式修饰。 取值范围:已存在的表名称。 alias 目标表的别名。 取值范围:字符串,符合标识符命名规范。 expression 赋给字段的值或表达式。 DEFAULT 用对应字段的缺省值填充该字段。 如果没有缺省值,则为NULL。 from_list 一个表的表达式列表,允许在WHERE条件里使用其他表的字段。与在一个SELECT语句的FROM子句里声明表列表类似。 目标表绝对不能出现在from_list里,除非在使用一个自连接(此时它必须以from_list的别名出现)。 condition 一个返回boolean类型结果的表达式。只有这个表达式返回true的行才会被更新。
  • 语法格式 1 2 3 4 UPDATE [/*+ plan_hint */] [ ONLY ] table_name [ * ] [ [ AS ] alias ] SET {column_name = { expression | DEFAULT } |( column_name [, ...] ) = {( { expression | DEFAULT } [, ...] ) |sub_query }}[, ...] [ FROM from_list] [ WHERE condition ];
  • 示例 创建表reason_update: 1 2 3 4 5 6 CREATE TABLE reason_update ( TABLE_SK INTEGER , TABLE_ID VARCHAR(20) , TABLE_NA VARCHAR(20) )WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON); 向表reason_update中插入数据: 1 INSERT INTO reason_update VALUES (1, 'S01', 'StudentA'),(2, 'T01', 'TeacherA'),(3, 'T02', 'TeacherB'); 对表reason_update执行UPDATE操作: 1 UPDATE reason_update SET TABLE_NA = 'TeacherD' where TABLE_SK = 3;
  • 注意事项 通过ALTER修改enable_hstore值可以将列存表变成HStore表,或者将HStore修改成列存表。但需要注意enable_delta为on时,无法设置enable_hstore为on。 对于部分ALTER操作(修改列类型,分区合并,添加NOT NULL约束,添加主键约束),HStore表需要先将数据MERGE到主表然后再执行原有的ALTER逻辑,这可能会带来额外的性能开销, 性能影响大小与delta表的数据量相关。 当需要增加列时, 建议不要与其它类型的ALTER(比如修改列类型等)组合使用,在一条ALTER里只有ADD COLUMN情况下,由于不需要做FULL MERGE,性能会有很大提升。 不支持修改存储参数ORIENTATION。
  • 注意事项 当单次插入的数据量大于等于表级参数DELTAROW_THRESHOLD时,数据会直接插入主表生成CU(Compress Unit)。 当插入的数据量小于表级参数DELTAROW_THRESHOLD时,会在辅助Delta表上插入一条类型为I的记录,同时将数据序列化存储到这条记录的values字段。 插入到Delta表的数据跟主表使用全局统一分配的cuid。 插入到delta表的数据依赖autovacuum来merge到主表CU。
  • 示例 创建表reason_t1: 1 2 3 4 5 6 7 -- 创建表reason_t1。 CREATE TABLE reason_t1 ( TABLE_SK INTEGER , TABLE_ID VARCHAR(20) , TABLE_NA VARCHAR(20) )WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON); 向表中插入一条记录: 1 INSERT INTO reason_t1(TABLE_SK, TABLE_ID, TABLE_NA) VALUES (1, 'S01', 'StudentA'); 向表中插入多条记录: 1 2 3 4 5 6 7 8 INSERT INTO reason_t1 VALUES (1, 'S01', 'StudentA'),(2, 'T01', 'TeacherA'),(3, 'T02', 'TeacherB'); SELECT * FROM reason_t1 ORDER BY 1; TABLE_SK | TABLE_ID | TABLE_NAME ----------+----------+------------ 1 | S01 | StudentA 2 | T01 | TeacherA 3 | T02 | TeacherB (3 rows)
  • 语法格式 1 2 3 INSERT [/*+ plan_hint */] [ IGNORE | OVERWRITE ] INTO table_name [ AS alias ] [ ( column_name [, ...] ) ] { DEFAULT VALUES | VALUES {( { expression | DEFAULT } [, ...] ) }[, ...] | query }
  • 示例 创建表reason_upsert并向表中插入数据: 1 2 3 4 5 6 7 CREATE TABLE reason_upsert ( a int primary key, b int, c int )WITH(ORIENTATION=COLUMN, ENABLE_HSTORE=ON); INSERT INTO reason_upsert VALUES (1, 2, 3); 忽略冲突的数据: 1 INSERT INTO reason_upsert VALUES (1, 4, 5),(2, 6, 7) ON CONFLICT(a) DO NOTHING; 更新冲突的数据: 1 INSERT INTO reason_upsert VALUES (1, 4, 5),(3, 8, 9) ON CONFLICT(a) DO UPDATE SET b = EXCLUDED.b, c = EXCLUDED.c;
  • 参数说明 第一种不指定索引。会在所有主键或唯一索引上检查冲突,有冲突就会忽略或者更新。 第二种指定索引。会从ON CONFLICT子句中指定列名、包含列名的表达式或者约束名上推断主键或者唯一索引。 唯一索引推断 对于第二种语法形式,通过指定列名或者约束名推断主键或者唯一索引。列名可以是单一列名,或者由多个列名组成的表达式,比如column1,column2,column3。 UPDATE子句 UPDATE子句可以通过VALUES(colname)或者EXCLUDED.colname引用插入的数据。EXCLUDED表示因冲突原本该排除的数据行。 WHERE子句 用于在数据冲突时,判断是否满足指定条件。如果满足,则更新冲突数据。否则忽略。 只有第二种语法形式的冲突更新语法可以指定WHERE子句。即INSERT INTO ON CONFLICT(...) DO UPDATE SET WHERE
  • 语法格式 表1 UPSERT语法格式 语法格式 冲突更新 冲突忽略 第一种:不指定索引 INSERT INTO ON DUPLICATE KEY UPDATE INSERT IGNORE INSERT INTO ON CONFLICT DO NOTHING 第二种:从指定列名或者约束上可以推断唯一约束 INSERT INTO ON CONFLICT(...) DO UPDATE SET INSERT INTO ON CONFLICT ON CONSTRAINT con_name DO UPDATE SET INSERT INTO ON CONFLICT(...) DO NOTHING INSERT INTO ON CONFLICT ON CONSTRAINT con_name DO NOTHING
  • 响应示例 状态码: 200 处理成功返回。 { "id" : 334, "name" : "电影", "parent_id" : 0, "level" : 1, "projectId" : "58411d8df9064*****75d75b54e01358" } 状态码: 400 处理失败返回。 { "error_code" : "VOD.10053", "error_msg" : "The request parameter is illegal, illegal field: {xx}." }
  • 响应参数 状态码: 200 表4 响应Body参数 参数 参数类型 描述 name String 媒资分类名称。 parent_id Integer 父分类ID。 一级分类父ID为0。 id Integer 媒资分类ID。 level Integer 媒资分类层级。 取值如下: 1:一级分类层级。 2:二级分类层级。 3:三级分类层级。 projectId String 项目ID。 状态码: 400 表5 响应Body参数 参数 参数类型 描述 error_code String 错误码。 error_msg String 错误描述。
  • 请求参数 表2 请求Header参数 参数 是否必选 参数类型 描述 X-Auth-Token 否 String 用户Token,使用Token鉴权方式时必选。 通过调用 IAM 服务获取用户Token接口获取(响应消息头中X-Subject-Token的值)。 Authorization 否 String 使用AK/SK方式认证时必选,携带的鉴权信息。 X-Sdk-Date 否 String 使用AK/SK方式认证时必选,请求的发生时间。 表3 请求Body参数 参数 是否必选 参数类型 描述 name 是 String 媒资分类名称,最大64字节。 parent_id 否 Integer 父分类ID。 若不填,则默认生成一级分类。 根节点分类ID为0。
  • URI GET /v1.1/{project_id}/asset/authority 表1 路径参数 参数 是否必选 参数类型 描述 project_id 是 String 项目ID,获取方法请参考获取项目ID 表2 Query参数 参数 是否必选 参数类型 描述 http_verb 是 String 分段上传时调用OBS接口的HTTP方法,具体操作需要的HTTP方法请参考OBS的接口文档。 初始化上传任务:POST 上传段:PUT 合并段:POST 取消段:DELETE 列举已上传段:GET bucket 是 String 桶名。 调用创建媒资:上传方式接口中返回的响应体中的target字段获得的bucket值。 object_key 是 String 对象名。 调用创建媒资:上传方式接口中返回的响应体中的target字段获得的object值。 content_type 否 String 文件类型对应的content-type,当为上传任务初始化场景该字段必填。 参数填写可参考媒资分段上传(20M以上)。 视频文件:video/视频格式,如:“video/mp4” 音频文件:audio/音频格式,如:“audio/mp3” 图片文件:image/图片格式,如:“image/png” 字幕文件:application/octet-stream content_md5 否 String 上传段时每段的MD5。 upload_id 否 String 每一个上传任务的id,是OBS进行初始段后OBS返回的。除上传任务初始化场景外,该字段必填。 part_number 否 Integer 上传段时每一段的id。 取值范围:[1,10000]。
共100000条