华为云用户手册

  • .LABEL 和 .GOTO Teradata命令.LABEL用于创建标签,通常与.GOTO配对使用。.GOTO会跳过所有中间的BTEQ命令和SQL语句,指导到达指定标签位置,执行相应的恢复处理。 gsql元命令\goto LABEL ... \label LABEL可以等价实现无条件跳转。 输入 输出 .IF CHECK_PK='' THEN .GOTO NOCHECK ${CHECK_PK}; .LABEL NOCHECK .QUIT 0 \if ${CHECK_PK} == '' \goto NOCHECK \endif ${CHECK_PK} \label NOCHECK \q 0
  • 设置与清除列默认值 MySQL使用ALTER语句设置列默认值时可省略"COLUMN"关键字。DSC工具迁移时会根据GaussDB(DWS)的特性进行相应适配。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 CREATE TABLE IF NOT EXISTS `runoob_alter_test`( `dataType1` int NOT NULL AUTO_INCREMENT, `dataType2` FLOAT(10,2), `dataType3` DOUBLE(20,8), `dataType4` TEXT NOT NULL, `dataType5` YEAR NOT NULL DEFAULT '2018', `dataType6` DATETIME NOT NULL DEFAULT '2018-10-12 15:27:33.999999', `dataType7` CHAR NOT NULL DEFAULT '', `dataType8` VARCHAR(50), `dataType9` VARCHAR(50) NOT NULL DEFAULT '', `dataType10` TIME NOT NULL DEFAULT '10:20:59', PRIMARY KEY(`dataType1`) )ENGINE=InnoDB DEFAULT CHARSET=utf8; ALTER TABLE runoob_alter_test ALTER dataType2 SET DEFAULT 1; ALTER TABLE runoob_alter_test ALTER COLUMN dataType2 SET DEFAULT 3; ALTER TABLE runoob_alter_test ALTER dataType2 DROP DEFAULT; ALTER TABLE runoob_alter_test ALTER COLUMN dataType2 DROP DEFAULT; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 CREATE TABLE IF NOT EXISTS "public"."runoob_alter_test" ( "datatype1" SERIAL NOT NULL, "datatype2" REAL, "datatype3" DOUBLE PRECISION, "datatype4" TEXT NOT NULL, "datatype5" SMALLINT NOT NULL DEFAULT '2018', "datatype6" TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT '2018-10-12 15:27:33.999999', "datatype7" CHAR(4) NOT NULL DEFAULT '', "datatype8" VARCHAR(200), "datatype9" VARCHAR(200) NOT NULL DEFAULT '', "datatype10" TIME WITHOUT TIME ZONE NOT NULL DEFAULT '10:20:59', PRIMARY KEY ("datatype1") ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype1"); ALTER TABLE "public"."runoob_alter_test" ALTER COLUMN "datatype2" SET DEFAULT '1'; ALTER TABLE "public"."runoob_alter_test" ALTER COLUMN "datatype2" SET DEFAULT '3'; ALTER TABLE "public"."runoob_alter_test" ALTER COLUMN "datatype2" DROP DEFAULT; ALTER TABLE "public"."runoob_alter_test" ALTER COLUMN "datatype2" DROP DEFAULT; 父主题: 表(可选参数、操作)
  • 注意事项 TRUNCATE TABLE在功能上与不带WHERE子句DELETE语句相同:二者均删除表中的全部行。 TRUNCATE TABLE比DELETE速度快且使用系统和事务日志资源少: DELETE语句每次删除一行,并在事务日志中为所删除每行记录一项。 TRUNCATE TABLE通过释放存储表数据所用数据页来删除数据,并且只在事务日志中记录页的释放。 TRUNCATE,DELETE,DROP三者的差异如下: TRUNCATE TABLE,删除内容,释放空间,但不删除定义。 DELETE TABLE,删除内容,不删除定义,不释放空间。 DROP TABLE,删除内容和定义,释放空间。
  • 参数说明 ONLY 如果声明ONLY,只有指定的表会被清空。如果没有声明ONLY,这个表以及其所有子表(若有)会被清空。 database_name 目标表的数据库名称。 schema_name 目标表的模式名称。 table_name 目标表的名字(可以有模式修饰)。 取值范围:已存在的表名。 CONTINUE IDENTITY 不改变序列的值。这是缺省值。 CASCADE | RESTRICT CASCADE:级联清空所有在该表上有外键引用的表,或者由于CASCADE而被添加到组中的表。 RESTRICT(缺省值):如果其他表在该表上有外键引用则拒绝清空。
  • 删除索引 MySQL支持DROP INDEX和ALTER TABLE DROP INDEX两种删除索引的语句。DSC工具迁移时会根据GaussDB(DWS)的特性进行相应适配。 DROP INDEX 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 CREATE TABLE `test_create_table03` ( `DEMAND_ID` INT(11) NOT NULL, `DEMAND_NAME` CHAR(100) NOT NULL, `THEME` VARCHAR(200) NULL DEFAULT NULL, `SEND_ID` INT(11) NULL DEFAULT NULL, `SEND_NAME` CHAR(20) NULL DEFAULT NULL, `SEND_TIME` DATETIME NULL DEFAULT NULL, `DEMAND_CONTENT` TEXT NOT NULL ) COLLATE='utf8_general_ci' ENGINE=InnoDB; CREATE UNIQUE INDEX DEMAND_NAME_INDEX ON TEST_CREATE_TABLE03(DEMAND_NAME); DROP INDEX DEMAND_NAME_INDEX ON TEST_CREATE_TABLE03; CREATE INDEX SEND_ID_INDEX ON TEST_CREATE_TABLE03(SEND_ID); DROP INDEX SEND_ID_INDEX ON TEST_CREATE_TABLE03; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CREATE TABLE "public"."test_create_table03" ( "demand_id" INTEGER NOT NULL, "demand_name" CHAR(400) NOT NULL, "theme" VARCHAR(800) DEFAULT NULL, "send_id" INTEGER DEFAULT NULL, "send_name" CHAR(80) DEFAULT NULL, "send_time" TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, "demand_content" TEXT NOT NULL ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("demand_id"); CREATE INDEX "demand_name_index" ON "public"."test_create_table03" ("demand_name"); DROP INDEX "public"."demand_name_index" RESTRICT; CREATE INDEX "send_id_index" ON "public"."test_create_table03" USING BTREE ("send_id"); DROP INDEX "public"."send_id_index" RESTRICT; ALTER TABLE DROP INDEX 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 CREATE TABLE `test_create_table03` ( `DEMAND_ID` INT(11) NOT NULL, `DEMAND_NAME` CHAR(100) NOT NULL, `THEME` VARCHAR(200) NULL DEFAULT NULL, `SEND_ID` INT(11) NULL DEFAULT NULL, `SEND_NAME` CHAR(20) NULL DEFAULT NULL, `SEND_TIME` DATETIME NULL DEFAULT NULL, `DEMAND_CONTENT` TEXT NOT NULL ) COLLATE='utf8_general_ci' ENGINE=InnoDB; ALTER TABLE TEST_CREATE_TABLE03 ADD UNIQUE INDEX TEST_CREATE_TABLE03_NAME_INDEX(DEMAND_NAME(50)); ALTER TABLE TEST_CREATE_TABLE03 DROP INDEX TEST_CREATE_TABLE03_NAME_INDEX; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 CREATE TABLE "public"."test_create_table03" ( "demand_id" INTEGER NOT NULL, "demand_name" CHAR(400) NOT NULL, "theme" VARCHAR(800) DEFAULT NULL, "send_id" INTEGER DEFAULT NULL, "send_name" CHAR(80) DEFAULT NULL, "send_time" TIMESTAMP WITHOUT TIME ZONE DEFAULT NULL, "demand_content" TEXT NOT NULL ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("demand_id"); CREATE INDEX "test_create_table03_name_index" ON "public"."test_create_table03" ("demand_name"); DROP INDEX "public"."test_create_table03_name_index" RESTRICT; 父主题: 索引
  • 示例 显示用字母t和f输出boolean值。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 --创建表。 CREATE TABLE bool_type_t1 ( BT_COL1 BOOLEAN, BT_COL2 TEXT ) DISTRIBUTE BY HASH(BT_COL2); --插入数据。 INSERT INTO bool_type_t1 VALUES (TRUE, 'sic est'); INSERT INTO bool_type_t1 VALUES (FALSE, 'non est'); --查看数据。 SELECT * FROM bool_type_t1; bt_col1 | bt_col2 ---------+--------- t | sic est f | non est (2 rows) SELECT * FROM bool_type_t1 WHERE bt_col1 = 't'; bt_col1 | bt_col2 ---------+--------- t | sic est (1 row) --删除表。 DROP TABLE bool_type_t1;
  • 安装DSC工具 DSC是一款运行在Linux或Windows操作系统上的命令行工具,可免安装使用,下载软件包后,用户解压软件包即可使用。 Windows: 解压DSC.zip包。 得到DSC文件夹。 解压DSC.zip时,可根据需要选择任意文件夹进行解压。 进入DSC目录。 找到并查看DSC目录中的文件。 解压出来的文件夹和文件说明如表1所示。 Linux操作系统: 从DSC.zip包中提取文件。 sh install.sh 进入DSC目录。 cd DSC 查看DSC目录中的文件。 ls config lib scripts bin input output runDSC.sh runDSC.bat 表1 DSC目录 文件或文件夹 说明 DSC bin dsc相关jar(可执行的)。 config DSC工具的配置文件。 input 输入文件夹 lib 该文件夹中包括DSC正常运行所必须的库文件。 output 输出文件夹 scripts 该文件夹中包括Oracle和Teradata迁移的自定义配置脚本,用户可以直接执行sql文件启用所需功能。 runDSC.sh 在Linux操作系统中运行应用程序。 runDSC.bat 在Windows操作系统中运行应用程序。 changelog 通知当前修改。 Install.sh 设置DSC的文件权限。 readme.txt 在安装和配置前,阅读安装和配置操作说明。 如果不再需要DSC,可以通过删除DSC文件夹本身来卸载它。
  • windowfunnel windowfunnel函数用于在滑动的时间窗口中搜索事件列表并计算条件匹配的事件列表的最大长度。GaussDB(DWS)根据用户定义的事件列表,从第一个事件开始匹配,依次做有序最长的匹配,返回匹配的最大长度。一旦匹配失败,结束整个匹配。具体介绍如下: 假设在窗口足够大的条件下: 条件事件为c1,c2,c3,而用户数据为c1,c2,c3,c4,最终匹配到c1,c2,c3,函数返回值为3。 条件事件为c1,c2,c3,而用户数据为c4,c3,c2,c1,最终匹配到c1,函数返回值为1。 条件事件为c1,c2,c3,而用户数据为c4,c3,最终没有匹配到事件,函数返回值为0。 语法 1 windowFunnel(window, mode, timestamp, cond1, cond2, ..., condN) 入参说明 window:bigint类型。滑动的时间窗口的大小,指从第一个事件开始,往后推移的时间窗口大小,单位为秒。 mode:text类型。目前仅支持default模式,其他模式报错处理。Default模式是指在同一个窗口期内,从第一个事件开始匹配,尽量匹配多的事件。 timestamp:事件发生的时间范围,支持timestamp without time zone、timestamp with time zone、date、int、bigint类型。 cond:变长boolean数组。指当前Tuple的数据满足事件的哪个步骤。GaussDB(DWS)只支持1~32个condition,不在此范围报错处理。 返回值 level:int类型。条件匹配的事件列表的最大长度。
  • retention retention函数可以将一组条件作为参数,分析事件是否满足该条件。 语法 1 retention(cond1, cond2, ..., cond32); 入参说明 cond:变长boolean数组,最大长度32,用来表示事件是否满足特定条件。GaussDB(DWS)只支持1~32个condition,不在此范围报错处理。 返回值 retention condition:tinyint数组类型。返回结果的表达式,与入参cond长度一致,若第cond1和condi条件满足,则返回值第i个值为1,否则为0。
  • 示例 创建表funnel_test: CREATE TABLE IF NOT EXISTS funnel_test ( user_id INT , event_type TEXT, event_time TIMESTAMP, event_timez TIMESTAMP WITH TIME ZONE, event_time_int BIGINT ); 插入数据: INSERT INTO funnel_test VALUES (1,'浏览页面','2021-01-31 11:00:00', '2021-01-31 11:00:00+08', 10), (1,'点击商品','2021-01-31 11:10:00', '2021-01-31 11:10:00+07', 20), (1,'加入购物车','2021-01-31 11:20:00', '2021-01-31 11:20:00+06', 30), (1,'支付货款','2021-01-31 11:30:00', '2021-01-31 11:30:00+05', 40), (2,'加入购物车','2021-01-31 11:00:00', '2021-01-31 11:00:00+08', 11), (2,'支付货款','2021-01-31 11:10:00', '2021-01-31 11:10:00+08', 12), (1,'浏览页面','2021-01-31 11:00:00', '2021-01-31 11:00:00+01', 50), (3,'浏览页面','2021-01-31 11:20:00', '2021-01-31 11:20:00-04', 30), (3,'点击商品','2021-01-31 12:00:00', '2021-01-31 12:00:00-04', 80), (4,'浏览页面','2021-01-31 11:50:00', '2021-01-31 11:50:00-01', 1000), (4,'支付货款','2021-01-31 12:00:00', '2021-01-31 12:00:00-02', 900), (4,'加入购物车','2021-01-31 12:00:00', '2021-01-31 12:00:00-03', 1001), (4,'点击商品','2021-01-31 12:00:00', '2021-01-31 12:00:00-04', 1001), (5,'浏览页面','2021-01-31 11:50:00', '2021-01-31 11:50:00+08', NULL), (5,'点击商品','2021-01-31 12:00:00', '2021-01-31 12:00:00+08', 776), (5,'加入购物车','2021-01-31 11:10:00', '2021-01-31 11:10:00+08', 999), (6,'浏览页面','2021-01-31 11:50:00', '2021-01-31 11:50:00+01', -1), (6,'点击商品','2021-01-31 12:00:00', '2021-01-31 12:00:00+02', -2), (6,'加入购物车','2021-01-31 12:10:00', '2021-01-31 12:00:00+03', -3); 计算每个用户的漏斗情况。返回结果如下,其中level=0表示用户在窗口期内匹配最大事件深度为0,level=1表示用户在窗口期内匹配最大事件深度为1: SELECT user_id, windowFunnel( 0, 'default', event_timez, event_type = '浏览页面', event_type = '点击商品', event_type = '加入购物车', event_type = '支付货款' ) AS level FROM funnel_test GROUP BY user_id ORDER by user_id; user_id | level ---------+------- 1 | 1 2 | 0 3 | 1 4 | 1 5 | 1 6 | 1 (6 rows) 计算每个用户的漏斗情况,指定滑动的时间窗口的大小为NULL,返回报错: SELECT user_id, windowFunnel( NULL, 'default', event_time, event_type = '浏览页面', event_type = '点击商品', event_type = '加入购物车', event_type = '支付货款' ) AS level FROM funnel_test GROUP BY user_id ORDER by user_id; ERROR: Invalid parameter : window length or mode is null. 计算每个用户的漏斗情况,指定多个条件: SELECT user_id, windowFunnel( 40, 'default', date(event_time), true, true, false, true ) AS level FROM funnel_test GROUP BY user_id ORDER by user_id; user_id | level ---------+------- 1 | 2 2 | 2 3 | 2 4 | 2 5 | 2 6 | 2 (6 rows) 分析用户的留存情况: SELECT user_id, retention( event_type = '浏览页面', event_type = '点击商品', event_type = '加入购物车', event_type = '支付货款' ) AS r FROM funnel_test GROUP BY user_id ORDER BY user_id ASC; user_id | r ---------+----------- 1 | {1,1,1,1} 2 | {0,0,0,0} 3 | {1,1,0,0} 4 | {1,1,1,1} 5 | {1,1,1,0} 6 | {1,1,1,0} (6 rows) 分析用户的留存情况,指定第一个时间为false: SELECT user_id, retention( false, event_type = '浏览页面', event_type = '点击商品', event_type = '加入购物车', event_type = '支付货款' ) AS r FROM funnel_test GROUP BY user_id ORDER BY user_id ASC; user_id | r ---------+------------- 1 | {0,0,0,0,0} 2 | {0,0,0,0,0} 3 | {0,0,0,0,0} 4 | {0,0,0,0,0} 5 | {0,0,0,0,0} 6 | {0,0,0,0,0} (6 rows) 分析用户的留存情况总和: SELECT sum(r[1]), sum(r[2]), sum(r[3]), sum(r[4]) FROM ( SELECT retention(event_type = '浏览页面', event_type = '点击商品', event_type = '加入购物车', event_type = '支付货款') AS r FROM funnel_test GROUP BY user_id ); sum | sum | sum | sum -----+-----+-----+----- 5 | 5 | 4 | 2 (1 row) 统计每个用户在1,3,7天后的付费留存率: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 SELECT user_id, range_retention_count(event_type = '浏览页面', event_type = '支付货款', DATE(event_time), ARRAY[1, 3, 7], 'day') as r FROM funnel_test GROUP BY user_id ORDER BY user_id; user_id | r ---------+------------------ 1 | {80135499808768} 2 | {} 3 | {80135499808768} 4 | {80135499808768} 5 | {80135499808768} 6 | {80135499808768} (6 rows)
  • range_retention_count 描述:记录每个用户的留存情况,该函数返回数组,可以作为range_retention_sum函数的入参。 语法 1 range_retention_count(is_first, is_active, dt, retention_interval, retention_granularity, output_format) 入参说明 is_first:bool类型,是否符合初始行为,true表示符合, false表示不符合 。 is_active:bool类型,是否符合留存行为,true表示符合, false表示不符合 。 dt:date类型,发生行为的日期。 retention_interval:数组类型,表示留存间隔,最多支持15个留存间隔。例如ARRAY[1,3,5,7,15,30]。 retention_granularity:text类型,表示留存分析粒度,执行日(day)、周(week)、月(month)三种。 output_format:text类型,表示输出格式,支持normal(默认)和expand(可取得每日留存明细)两种。 返回值:用户留存情况BIGINT数组。
  • 普通索引和前缀索引 GaussDB(DWS)不支持前缀索引,也不支持内联普通索引。DSC工具迁移时会根据GaussDB(DWS)的特性将其迁移为普通索引。 内联普通(前缀)索引。 输入示例 1 2 3 4 5 6 CREATE TABLE IF NOT EXISTS `public`.`runoob_dataType_test` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(128) NOT NULL, INDEX index_single(name(10)) ); 输出示例 1 2 3 4 5 6 7 8 9 CREATE TABLE IF NOT EXISTS "public"."runoob_datatype_test" ( "id" SERIAL PRIMARY KEY, "name" VARCHAR(512) NOT NULL ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("id"); CREATE INDEX "index_single" ON "public"."runoob_datatype_test" USING BTREE ("name"); ALTER TABLE创建普通(前缀)索引。 输入示例 1 2 3 4 5 6 7 8 9 CREATE TABLE `public`.`test_create_table05` ( `ID` INT(11) NOT NULL AUTO_INCREMENT, `USER_ID` INT(20) NOT NULL, `USER_NAME` CHAR(20) NULL DEFAULT NULL, `DETAIL` VARCHAR(100) NULL DEFAULT NULL, PRIMARY KEY (`ID`) ); ALTER TABLE TEST_CREATE_TABLE05 ADD INDEX USER_NAME_INDEX_02(USER_NAME(10)); 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE "public"."test_create_table05" ( "id" SERIAL NOT NULL, "user_id" INTEGER NOT NULL, "user_name" CHAR(80) DEFAULT NULL, "detail" VARCHAR(400) DEFAULT NULL, PRIMARY KEY ("id") ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("id"); CREATE INDEX "user_name_index_02" ON "public"."test_create_table05" ("user_name"); CREATE INDEX创建普通(前缀)索引。 输入示例 1 2 3 4 5 6 7 CREATE TABLE IF NOT EXISTS `public`.`customer`( `name` varchar(64) primary key, id integer, id2 integer ); CREATE INDEX part_of_name ON customer (name(10)); 输出示例 1 2 3 4 5 6 7 8 9 10 11 CREATE TABLE IF NOT EXISTS "public"."customer" ( "name" VARCHAR(256) PRIMARY KEY, "id" INTEGER, "id2" INTEGER ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("name"); CREATE INDEX "part_of_name" ON "public"."customer" USING BTREE ("name"); 父主题: 索引
  • MALLOC_CONF 环境变量MALLOC_CONF用于控制监控模块是否开启,位于${BIGDATA_HOME}/mppdb/.mppdbgs_profile文件内,默认开启。需注意: 修改此环境变量变化,需要重启数据库。 如果在集群中启用了om_monitor,完成环境变量设置后,先重启om_monitor进程后,然后重启数据库,使得开关生效。 该环境变量可以设置在集群所有服务器中,也可以仅设置在需要开启模块的个别服务器中,对GaussDB进程而言,各进程是根据各自MALLOC_CONF环境变量,控制模块是否打开。 MALLOC_CONF开启和关闭命令: 开启监控模块: export MALLOC_CONF=prof:true 关闭监控模块: export MALLOC_CONF=prof:false
  • DSC常见问题 本章介绍常见问题。 问题1:在安装过程中,提示“ Root privileged users are not allowed to install the DSC for Linux. ”应如何处理? 答:拥有root权限的用户不得在Linux中安装和执行DSC。建议使用没有root权限的用户来安装和操作DSC。 问题2:如何配置DSC,以便Teradata支持GaussDB 200 V100R002C60版本? 答:执行以下步骤设置表变量值,以支持当前GaussDB 200 V100R002C60版本: 打开TOOL_HOME路径下config文件夹中的Teradata features-teradata.properties文件。 根据需要修改下列变量: VOLATILE PRIMARY INDEX 例如: VOLATILE=UNLOGGED | LOCAL TEMPORARY PRIMARY INDEX=ONE | MANY VOLATILE变量的默认值为LOCAL TEMPORARY,PRIMARY INDEX变量的默认值为MANY。 父主题: DSC
  • 隐式类型转换 输入:隐式类型转换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 SELECT Data_Type,Start_Dt,End_Dt FROM ( SELECT Data_Type,Start_Dt,End_Dt FROM ( SELECT '101' AS Data_Type,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD')-1 AS Start_Dt,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AS End_Dt ) TT UNION ALL SELECT '201' AS Data_Type,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD')-7 AS Start_Dt,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AS End_Dt FROM Sys_Calendar.CALENDAR WHERE calendar_date = CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AND Day_Of_Week = 1 UNION ALL SELECT Data_Type,Start_Dt,End_Dt FROM ( SELECT '401' AS Data_Type,CAST('${TX_PRIMONTH_END}' AS DATE FORMAT 'YYYYMMDD') AS Start_Dt,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AS End_Dt ) TT WHERE CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD')=CAST('${TX_MONTH_END}' AS DATE FORMAT 'YYYYMMDD') UNION ALL SELECT Data_Type,Start_Dt,End_Dt FROM ( SELECT '501' AS Data_Type,CAST('${TX_PRIQUARTER_END}' AS DATE FORMAT 'YYYYMMDD') AS Start_Dt,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AS End_Dt ) TT WHERE CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD')=CAST('${TX_QUARTER_END}' AS DATE FORMAT 'YYYYMMDD') UNION ALL SELECT Data_Type,Start_Dt,End_Dt FROM ( SELECT '701' AS Data_Type,CAST('${TX_PRIYEAR_END}' AS DATE FORMAT 'YYYYMMDD') AS Start_Dt,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AS End_Dt ) TT WHERE CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD')=CAST('${TX_YEAR_END}' AS DATE FORMAT 'YYYYMMDD') ) T1 ; 输出 SELECT Data_Type,Start_Dt,End_Dt FROM ( SELECT Data_Type,Start_Dt,End_Dt FROM ( SELECT CAST('101' AS TEXT) AS Data_Type,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD')-1 AS Start_Dt,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AS End_Dt ) TT UNION ALL SELECT CAST('201' AS TEXT) AS Data_Type,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD')-7 AS Start_Dt,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AS End_Dt FROM Sys_Calendar.CALENDAR WHERE calendar_date = CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AND Day_Of_Week = 1 UNION ALL SELECT Data_Type,Start_Dt,End_Dt FROM ( SELECT CAST('401' AS TEXT) AS Data_Type,CAST('${TX_PRIMONTH_END}' AS DATE FORMAT 'YYYYMMDD') AS Start_Dt,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AS End_Dt ) TT WHERE CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD')=CAST('${TX_MONTH_END}' AS DATE FORMAT 'YYYYMMDD') UNION ALL SELECT Data_Type,Start_Dt,End_Dt FROM ( SELECT CAST('501' AS TEXT) AS Data_Type,CAST('${TX_PRIQUARTER_END}' AS DATE FORMAT 'YYYYMMDD') AS Start_Dt,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AS End_Dt ) TT WHERE CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD')=CAST('${TX_QUARTER_END}' AS DATE FORMAT 'YYYYMMDD') UNION ALL SELECT Data_Type,Start_Dt,End_Dt FROM ( SELECT CAST('701' AS TEXT) AS Data_Type,CAST('${TX_PRIYEAR_END}' AS DATE FORMAT 'YYYYMMDD') AS Start_Dt,CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD') AS End_Dt ) TT WHERE CAST('${TX_DATE}' AS DATE FORMAT 'YYYYMMDD')=CAST('${TX_YEAR_END}' AS DATE FORMAT 'YYYYMMDD') ) T1 ;
  • DATE 在Teradata中对DATE进行格式转换时,使用AS FORMAT。DSC将添加TO_CHAR函数来保留指定的输入格式。 详情请参见日期和时间函数。 输入:数据类型转换,不使用DATE关键字 1 2 3 SELECT CAST( CAST( '2013-02-12' AS DATE FORMAT 'YYYY/MM/DD' ) AS FORMAT 'DD/MM/YY' ) ; 输出 1 2 3 SELECT TO_CHAR( CAST( '2013-02-12' AS DATE ) ,'DD/MM/YY' ) ;
  • 转换数据类型DAY为SECOND 输入:DAY转换为SECOND 1 2 SELECT CAST(T1.Draw_Gold_Dt || ' ' ||T1.Draw_Gold_Tm as Timestamp) - CAST(T1.Tx_Dt || ' '|| T1.Tx_Tm as Timestamp) DAY(4) To SECOND from db_pvfc9_std.draw_tab T1; 输出 1 2 3 4 5 SELECT CAST(( CAST( T1.Draw_Gold_Dt || ' ' || T1.Draw_Gold_Tm AS TIMESTAMP ) - CAST(T1.Tx_Dt || ' ' || T1.Tx_Tm AS TIMESTAMP ) ) AS INTERVAL DAY ( 4 ) TO SECOND ) FROM db_pvfc9_std.draw_tab T1 ;
  • DECIMAL 输入:DECIMAL转换 1 2 3 4 5 6 7 8 9 10 SELECT standard_price ( DECIMAL( 17 ) ,FORMAT '9(17)' ) ( CHAR( 17 ) ) FROM db_pvfc9_std.Product_t ; 输出 1 2 3 4 5 SELECT CAST( LPAD( CAST( standard_price AS DECIMAL( 17 ,0 ) ) ,17 ,'0' ) AS CHAR( 17 ) ) FROM db_pvfc9_std.Product_t ; 输入:DECIMAL转换 1 2 3 4 5 6 7 8 9 10 SELECT standard_price ( DECIMAL( 17 ,0 ) ,FORMAT '9(17)' ) ( VARCHAR( 17 ) ) FROM db_pvfc9_std.Product_t ; 输出 1 2 3 4 5 SELECT CAST( LPAD( CAST( standard_price AS DECIMAL( 17 ,0 ) ) ,17 ,'0' ) AS VARCHAR( 17 ) ) FROM db_pvfc9_std.Product_t ; 输入:DECIMAL转换 1 2 3 4 5 6 7 8 9 10 11 SELECT customer_id ( DECIMAL( 17 ) ) ( FORMAT '9(17)' ) ( VARCHAR( 17 ) ) FROM db_pvfc9_std.Customer_t ; 输出 1 2 3 4 5 SELECT CAST( LPAD( CAST( customer_id AS DECIMAL( 17 ,0 ) ) ,17 ,'0' ) AS VARCHAR( 17 ) ) FROM db_pvfc9_std.Customer_t ;
  • COLUMNS和COLUMN ALIAS 输入:对某列进行类型转换和格式化时,应确保列名和别名相同 1 2 3 4 5 6 7 SELECT Product_Line_ID, MAX(Standard_Price) FROM ( SELECT A.Product_Description, A.Product_Line_ID , A.Standard_Price(DECIMAL(18),FORMAT '9(18)')(CHAR(18)) FROM product_t A WHERE Product_Line_ID in (1, 2) ) AS tabAls GROUP BY Product_Line_ID; 输出 1 2 3 4 5 6 7 SELECT Product_Line_ID, MAX( Standard_Price ) FROM ( SELECT A.Product_Description, A.Product_Line_ID , CAST( LPAD( CAST(A.Standard_Price AS DECIMAL( 18 ,0 )), 18, '0' ) AS CHAR( 18 ) ) AS Standard_Price FROM product_t A WHERE Product_Line_ID IN( 1 ,2 ) ) AS tabAls GROUP BY Product_Line_ID;
  • 表达式 输入:对表达式进行类型转换和格式化 1 2 3 SELECT product_id, standard_price*100.00(DECIMAL (17),FORMAT '9(17)' )(CHAR(17) ) AS order_amt FROM db_pvfc9_std.Product_t WHERE product_line_id is not null ; 输出 1 2 3 SELECT product_id, CAST(LPAD(CAST(standard_price*100.00 AS DECIMAL(17)), 17, '0') AS CHAR(17)) AS order_amt FROM db_pvfc9_std.Product_t WHERE product_line_id is not null ;
  • INT 输入:INT转换 1 2 3 4 5 6 7 SELECT CAST( col1 AS INT ) ( FORMAT '9(5)' ) FROM table1 ; 输出 1 2 3 4 5 SELECT LPAD( CAST( col1 AS INT ) ,5 ,'0' ) FROM table1 ; 输入:INT转换 1 2 3 4 5 6 7 SELECT CAST( col1 AS INT ) ( FORMAT '999999' ) FROM table1 ; 输出 1 2 3 4 5 SELECT LPAD( CAST( col1 AS INT ) ,6 ,'0' ) FROM table1 ; 输入:INT转换 1 2 3 4 5 SELECT CAST( expression1 AS INT FORMAT '9(10)' ) FROM table1 ; 输出 1 2 3 4 5 SELECT LPAD( CAST( expression1 AS INT ) ,10 ,'0' ) FROM table1 ; 输入:INT转换 1 2 3 4 5 SELECT CAST( expression1 AS INT FORMAT '9999' ) FROM table1 ; 输出 1 2 3 4 5 SELECT LPAD( CAST( expression1 AS INT ) ,4 ,'0' ) FROM table1 ;
  • CHANGE修改列 MySQL使用CHANGE关键字同时修改列名、列数据类型、设置非空约束。DSC工具迁移时会根据GaussDB(DWS)的特性进行相应适配。 输入示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 CREATE TABLE IF NOT EXISTS `runoob_alter_test`( `dataType0` varchar(128), `dataType1` bigint, `dataType2` bigint, `dataType3` bigint, `dataType4` bigint )ENGINE=InnoDB DEFAULT CHARSET=utf8; ## A. ALTER TABLE runoob_alter_test CHANGE dataType1 dataType1New VARCHAR(50); ## B. ALTER TABLE runoob_alter_test CHANGE dataType2 dataType2New VARCHAR(50) NOT NULL; ## C. ALTER TABLE runoob_alter_test CHANGE dataType3 dataType3New VARCHAR(100) FIRST; ## D. ALTER TABLE runoob_alter_test CHANGE dataType4 dataType4New VARCHAR(50) AFTER dataType1; 输出示例 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CREATE TABLE "public"."runoob_alter_test" ( "datatype0" VARCHAR(512), "datatype1" BIGINT, "datatype2" BIGINT, "datatype3" BIGINT, "datatype4" BIGINT ) WITH ( ORIENTATION = ROW, COMPRESSION = NO ) NOCOMPRESS DISTRIBUTE BY HASH ("datatype0"); -- A. ALTER TABLE "public"."runoob_alter_test" CHANGE COLUMN "datatype1" "datatype1new" VARCHAR(200) NULL DEFAULT NULL; -- B. ALTER TABLE "public"."runoob_alter_test" CHANGE COLUMN "datatype2" "datatype2new" VARCHAR(200) NOT NULL; -- C. ALTER TABLE "public"."runoob_alter_test" CHANGE COLUMN "datatype3" "datatype3new" VARCHAR(400) NULL DEFAULT NULL; -- D. ALTER TABLE "public"."runoob_alter_test" CHANGE COLUMN "datatype4" "datatype4new" VARCHAR(200) NULL DEFAULT NULL; 父主题: 表(可选参数、操作)
  • 示例 查询会话信息: 1 2 3 4 5 6 7 8 9 10 11 12 13 SELECT sid,serial#,username FROM V$SESSION; sid | serial# | username -----------------+---------+---------- 140131075880720 | 0 | 140131025549072 | 0 | 140131073779472 | 0 | 140131071678224 | 0 | 140131125774096 | 0 | 140131127875344 | 0 | 140131113629456 | 0 | 140131094742800 | 0 | (8 rows) 结束SID为140131075880720的会话: 1 ALTER SYSTEM KILL SESSION '140131075880720,0' IMMEDIATE;
  • 全局临时表 全局临时表迁移为本地临时表。 输入:GLOBAL TEMPORARY TABLE CREATE GLOBAL TEMPORARY TABLE "Pack1"."GLOBAL_TEMP_TABLE" ( "ID" VARCHAR2(8) ) ON COMMIT DELETE ROWS ; 输出 CREATE LOCAL TEMPORARY TABLE "Pack1_GLOBAL_TEMP_TABLE" ( "ID" VARCHAR2 (8) ) ON COMMIT PRESERVE ROWS ; 父主题: 模式对象
  • 示例 创建表reason_t2,并向表中插入数据: 1 2 3 4 5 6 7 8 9 10 11 12 13 CREATE TABLE reason_t2 ( a int primary key, b int, c int ); INSERT INTO reason_t2 VALUES (1, 2, 3); SELECT * FROM reason_t2 ORDER BY 1; a | b | c ---+---+--- 1 | 2 | 3 (1 rows) 向表reason_t2中插入两条数据,一条有冲突,一条无冲突。有冲突的数据进行忽略,无冲突的数据进行插入: 1 2 3 4 5 6 7 INSERT INTO reason_t2 VALUES (1, 4, 5),(2, 6, 7) ON CONFLICT(a) DO NOTHING; SELECT * FROM reason_t2 ORDER BY 1; a | b | c ---+---+---- 1 | 2 | 3 2 | 6 | 7 (2 rows) 向表reason_t2中插入数据,一条有冲突,一条无冲突。有冲突的数据进行更新,无冲突的数据进行插入: 1 2 3 4 5 6 7 8 INSERT INTO reason_t2 VALUES (1, 4, 5),(3, 8, 9) ON CONFLICT(a) DO UPDATE SET b = EXCLUDED.b, c = EXCLUDED.c; SELECT * FROM reason_t2 ORDER BY 1; a | b | c ---+---+---- 1 | 4 | 5 2 | 6 | 7 3 | 8 | 9 (3 rows) 根据过滤条件筛选被更新的行: 1 2 3 4 5 6 7 8 INSERT INTO reason_t2 VALUES (2, 7, 8) ON CONFLICT (a) DO UPDATE SET b = excluded.b, c = excluded.c WHERE reason_t2.c = 7; SELECT * FROM reason_t2 ORDER BY 1; a | b | c ---+---+--- 1 | 4 | 5 2 | 7 | 8 3 | 8 | 9 (3 rows) 向表reason_t中插入数据,有冲突的数据进行更新并调整更新映射关系,即c列更新到b,b列更新到c: 1 2 3 4 5 6 7 8 INSERT INTO reason_t2 VALUES (1, 2, 3) ON CONFLICT (a) DO UPDATE SET b = excluded.c, c = excluded.b; SELECT * FROM reason_t2 ORDER BY 1; a | b | c ---+---+--- 1 | 3 | 2 2 | 7 | 8 3 | 8 | 9 (3 rows)
  • 语法格式 详细介绍请参见INSERT的语法格式。有两种UPSERT语法格式: 表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
  • 导出DDL和数据 可通过右键单击“导出DDL”导出该模式下函数/过程、表、序列和视图的定义。如果需要导出数据,可右键单击“导出DDL和数据”。 在“对象浏览器”窗格中,右键单击所选模式,选择“导出DDL”。 用户需自定义导出路径。如果需要将数据压缩,勾选“.zip”选项。 “Data Studio安全免责声明”必须勾选“我同意”才可以单击“确定”。用户可关闭安全免责声明,关闭后导出DDL时将不会再出现,详情请参见表1。 单击“确定”,右下角的状态栏会显示操作进度。 如果文件名包含Windows中文件名不支持的字符,则文件名的名称会与模式名称不同。 要执行该操作,需要MS Visual C Runtime文件(msvcrt100.dll)。详情请参阅故障处理。 可选择并导出多个对象的DDL。批量导出章节列举了不支持导出DDL的对象。 “导出完成”对话框和状态栏显示已完成操作的状态。 表1 支持导出DDL的编码格式 数据库编码 文件编码 支持导出DDL UTF-8 UTF-8 是 GBK 是 LATIN1 是 GBK GBK 是 UTF-8 是 LATIN1 否 LATIN1 LATIN1 是 GBK 否 UTF-8 是
  • 自定义表空间 输入: 自定义表空间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 CREATE TABLE SEAS_VERSION_DDL_REL_ORA ( VERSION_ORA_ID VARCHAR2 (20) ,TAB_OBJ_ID VARCHAR2 (20) ,AUDIT_ID VARCHAR2 (20) ,DDL_SYS CLOB ,DDL_USER CLOB ,IF_CONFORM VARCHAR2 (3) ,DDL_TYPE_SYS VARCHAR2 (5) ,DDL_REN_REASON_SYS VARCHAR2 (4000) ,DDL_ERR_SYS VARCHAR2 (4000) ) SEGMENT CREATION IMMEDIATE PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING STORAGE ( INITIAL 655360 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT ) TABLESPACE DRMS LOB (DDL_SYS) STORE AS BASICFILE ( TABLESPACE DRMS ENABLE STORAGE IN ROW CHUNK 8192 RETENTION NOCACHE LOGGING STORAGE ( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT ) ) LOB (DDL_USER) STORE AS BASICFILE ( TABLESPACE DRMS ENABLE STORAGE IN ROW CHUNK 8192 RETENTION NOCACHE LOGGING STORAGE ( INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT ) ) 输出 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 CREATE TABLE SEAS_VERSION_DDL_REL_ORA ( VERSION_ORA_ID VARCHAR2 (20) ,TAB_OBJ_ID VARCHAR2 (20) ,AUDIT_ID VARCHAR2 (20) ,DDL_SYS CLOB ,DDL_USER CLOB ,IF_CONFORM VARCHAR2 (3) ,DDL_TYPE_SYS VARCHAR2 (5) ,DDL_REN_REASON_SYS VARCHAR2 (4000) ,DDL_ERR_SYS VARCHAR2 (4000) ) /*SEGMENT CREATION IMMEDIATE*/ /*PCTFREE 10*/ /*PCTUSED 40*/ /*INITRANS 1*/ /*MAXTRANS 255*/ /*NOCOMPRESS*/ /*LOGGING*/ /*STORAGE(INITIAL 655360 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)*/ /*TABLESPACE DRMS */ /*LOB (DDL_SYS) STORE AS BASICFILE ( TABLESPACE DRMS ENABLE STORAGE IN ROW CHUNK 8192 RETENTION NOCACHE LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))*/ /*LOB (DDL_USER) STORE AS BASICFILE ( TABLESPACE DRMS ENABLE STORAGE IN ROW CHUNK 8192 RETENTION NOCACHE LOGGING STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT))*/ ; 父主题: Oracle语法迁移
  • 大字段类型 行存储支持BLOB 和CLOB。列存储不支持BLOB,仅支持CLOB。 Netezza语法 迁移后语法 1 2 3 4 5 6 7 8 9 10 CREATE TABLE prod ( prod_no number(6) not null, prod_name national character varying(32) not null, prod_desc clob, prod_image blob ) DISTRIBUTE ON (prod_no, prod_name) ORGANIZE ON (prod_no, prod_name) ; 1 2 3 4 5 6 7 8 9 10 CREATE TABLE prod ( prod_no number(6) not null, prod_name national character varying(32) not null, prod_desc clob, prod_image bytea ) WITH(ORIENTATION=COLUMN) DISTRIBUTE BY HASH (prod_no, prod_name) /* ORGANIZE ON (prod_no, prod_name) */ ;
  • 分布键 DISTRIBUTE ON (column)迁移为DISTRIBUTE BY HASH (column)。 Netezza语法 迁移后语法 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE N_AG_AMT_H ( AG_NO national character varying(50) not null, AG_CATEG_CD national character varying(12) not null, AMT_TYPE_CD national character varying(12) not null, DATA_START_DT date not null, CCY_CD national character varying(3) not null, DATA_END_DT date ) DISTRIBUTE ON (AG_NO, AG_CATEG_CD, AMT_TYPE_CD) ORGANIZE ON (AG_CATEG_CD, AMT_TYPE_CD, DATA_END_DT) ; 1 2 3 4 5 6 7 8 9 10 11 12 CREATE TABLE N_AG_AMT_H ( AG_NO national character varying(50) not null, AG_CATEG_CD national character varying(12) not null, AMT_TYPE_CD national character varying(12) not null, DATA_START_DT date not null, CCY_CD national character varying(3) not null, DATA_END_DT date ) WITH(ORIENTATION=COLUMN) DISTRIBUTE BY HASH (AG_NO, AG_CATEG_CD, AMT_TYPE_CD) /* ORGANIZE ON (AG_CATEG_CD, AMT_TYPE_CD, DATA_END_DT) */ ;
共100000条