-
(1)社区工具兼容数据集成:Talend、Kettle、DataX、DBT、Informatica等。数据开发:Navicat、DBeaver、DbVisualizer等。作业调度:Dataphin、Airflow等。BI分析:QuickBI、永洪BI、FineBI、PowerBI、Tableau、Cognos、SmartBI等。(2)华为工具兼容:数据集成:CDM、DRS、Migration等数据开发:SQL Editor、DataArts Studio、DASBI分析:DataArts Insight(1) 一站式可视化便捷管理GaussDB(DWS) 让您能够轻松完成从项目概念到生产部署的整个过程。通过使用GaussDB(DWS) 管理控制台,您不需要安装数据仓库软件,也不需要部署数据仓库服务器,就可以在几分钟之内获得高性能、高可靠的企业级数据仓库集群。您只需单击几下鼠标,就可以轻松完成应用程序与数据仓库的连接、数据备份、数据恢复、数据仓库资源和性能监控等运维管理工作。(2) 与大数据无缝集成您可以使用标准SQL查询HDFS、对象存储服务(Object Storage Service,OBS)上的数据,数据无需搬迁。(3) 提供一键式异构数据库迁移工具GaussDB(DWS) 提供配套的迁移工具,可支持MySQL、Oracle和Teradata的SQL脚本迁移到GaussDB(DWS) 。
-
GaussDB(DWS)是一款完全自主可控的国产数据库,兼容PostgreSQL生态,同时GaussDB(DWS)具备丰富的GP迁移成功经验。在某一迁移GP的成功案例中,面临客户原平台扩展性不足、数据加工链路长、数据分散等痛点问题,GaussDB(DWS)成功将Greenplum上数万个数据模型、数万个代码脚本、数百万行代码全部迁移至安全可控的数据仓库平台,基于GaussDB(DWS)的数据分析平台成功降低系统管理成本、技术复杂度,提升了资源配置效率、数据一致性,承载30000多个数据模型。GaussDB(DWS) 提供了配套的迁移工具,可支持TeraData、Oracle、MySQL、SQL Server、PostgreSQL、Greenplum、Impala等常用数据分析系统的平滑迁移。支持SQL 2003标准,兼容Oracle的部分语法和数据结构,支持存储过程,可与常用BI(business intelligence)工具无缝对接,业务迁移修改量极小。语法兼容性(1)Greenplum和DWS均支持SQL 2003,兼容大部分DDL与DML语法。(2)兼容GP所有数据类型。(3)兼容GP所有操作符。(4)兼容GP包括XML函数、JSON函数、窗口函数、聚集函数在内所有的复杂函数。(5)支持自定义函数和PROCEDURE。(6)支持Sort所有场景,包含FullSort/TopNSort。(7)支持Agg/Join/Sort落盘功能。(8)支持HashJoin/NestLoopJoin,完整支持Left/Right/Full/Inner/Anti/Semi六种Join规则。(9)支持 GroupAgg/HashAgg/PlainAgg,及Agg所有相关特性。(10)支持 HeapTable、Aocs Table的Scan,包含Seqscan和Index Scan。
-
DWS如何重置自增列的开始序号?使用函数setval(regclass, bigint)对自增列值进行重置。DWS如何确定sequence和哪个表有关联?先在pg_class查找目标sequence的oid,然后在pg_depend根据oid查依赖该sequence的对象。如何查询序列的last_value?由于SEQUENCE在自增过程中并不是严格逐个增加,因此序列号中会存在空端数据,所以last_value本身并没有实际意义,可以采用函数lastval()进行查询。注意事项如果当前会话还没有调用过nextval,那么调用lastval将会报错。此外,lastval()函数在默认情况下是不支持的,需要通过设置enable_beta_features或者lastval_supported为true之后,才能使用这个函数。同时这种情况下,nextval()函数将不支持下推。如何查询SEQUENC的当前最新值?通过currval函数可以查询SEQUENC的当前最新值。如何解决SEQUENC取值超出范围的问题?1.可以在创建SEQUENC时设置CYCLE字段,从而使得序列达到maxvalue或者minvalue后可循环并继续下去。但需要注意,若定义序列为CYCLE,则不能保证序列的唯一性。2.通过调用setval(regclass, bigint)函数对序列取值进行重置。
-
新序列值的产生是靠GTM维护的,默认情况下,每申请一个序列值都要向GTM发送一次申请,GTM在当前值的基础上加上步长值作为产生的新值返回给调用者。GTM作为全局唯一的节点,势必成为性能的瓶颈,所以对于需要大量频繁产生序列号的操作,如使用Bulkload工具进行数据导入场景,是非常不推荐产生默认序列值的。比如,在下面所示的场景中, INSERT FROM SELECT语句的性能会非常慢。setval设置的新值,会对当前会话的nextval立即生效,但对其他会话,如果定义了cache,不会立即生效,在用尽所有缓存的值后,其变动才被其他会话感知。所以为了避免产生重复值,要谨慎使用setval,设置的新值不能是已经产生的值或者在缓存中的值。如果必须要在bulkload场景下产生默认序列值,则一定要为newSeq1定义足够大的cache,并且不要定义Maxvalue或者Minvalue。数据库会试图将nextval(‘sequence_name’)的调用下推到Data Node,以提高性能。 目前GTM对并发的连接请求是有限制的,当Data Node很多时,将产生大量并发连接, 这时一定要控制bulkload的并发数目,避免耗尽GTM的连接资源。如果目标表为复制表(DISTRIBUTE BY REPLICATION)时下推将不能进行。当数据量较大时,这对数据库将是个灾难。除了性能问题之外,空间也可能会剧烈膨胀,在导入结束后,需要用vacuum full来恢复。最好的方式还是如上建议的,不要在bulkload的场景中产生默认序列值。另外,序列创建后,在每个节点上都维护了一张单行表,存储序列的定义及当前值,但此当前值并非GTM上的当前值,只是保存本节点与GTM交互后的状态。如果其他节点也向GTM申请了新值,或者调用了Setval修改了序列的状态,不会刷新本节点的单行表,但因每次申请序列值是向GTM申请,所以对序列正确性没有影响。
-
lastval()用于返回当前会话里最近一次nextval返回的数值。这个函数等效于currval,只是它不用序列名为参数,它抓取当前会话里面最近一次nextval使用的序列。如果当前会话还没有调用过nextval,那么调用lastval将会报错。需要注意的是,lastval()函数在默认情况下是不支持的,需要通过设置enable_beta_features或者lastval_supported为true之后,才能使用这个函数。同时这种情况下,nextval()函数将不支持下推。currval(regclass)用于返回当前会话里最近一次nextval返回的指定的sequence的数值。如果当前会话还没有调用过指定的sequence的nextval,那么调用currval将会报错。需要注意的是,这个函数在默认情况下是不支持的,需要通过设置enable_beta_features为true之后,才能使用这个函数。同时在设置enable_beta_features为true之后,nextval()函数将不支持下推。返回类型:bigintcurrval函数有两种调用方式(其中第二种调用方式兼容Oracle的语法,目前不支持Sequence命名中有特殊字符"."的情况)。Setval后当前会话及GTM上会立刻生效,但如果其他会话有缓存的序列值,只能等到缓存值用尽才能感知Setval的作用。所以为了避免序列值冲突,setval要谨慎使用。因为序列是非事务的,setval造成的改变不会由于事务的回滚而撤销。
-
DROP SEQUENCE用于从当前数据库里删除序列。注意事项只有序列的所有者或者系统管理员才能删除。IF EXISTS如果指定的序列不存在,则发出一个notice而不是抛出一个错误。name序列名称。CASCADE级联删除依赖序列的对象。RESTRICT如果存在任何依赖的对象,则拒绝删除序列。此项是缺省值。序列函数为用户从序列对象中获取后续的序列值提供了简单的多用户安全的方法。DWS目前支持以下SEQUENCE函数:nextval(regclass)用于递增序列并返回新值。返回类型:bigintnextval函数有两种调用方式(其中第二种调用方式兼容Oracle的语法,目前不支持Sequence命名中有特殊字符"."的情况)为了避免从同一个序列获取值的并发事务被阻塞, nextval操作不会回滚;也就是说,一旦一个值已经被抓取, 那么就认为它已经被用过了,并且不会再被返回。 即使该操作处于事务中,当事务之后中断,或者如果调用查询结束不使用该值,也是如此。这种情况将在指定值的顺序中留下未使用的"空洞"。 因此,GaussDB(DWS)序列对象不能用于获得"无间隙"序列。如果nextval被下推到DN上时,各个DN会自动连接GTM,请求next values值,例如(insert into t1 select xxx,t1某一列需要调用nextval函数),由于GTM上有最大连接数为8192的限制,而这类下推语句会导致消耗过多的GTM连接数,因此对于这类语句的并发数目限制为7000(其它语句需要占用部分连接)/集群DN数目。
-
将序列和一个表的指定字段进行关联。在删除那个字段或其所在表的时候会自动删除已关联的序列。ALTER SEQUENCE用于修改一个现有的序列的参数。注意事项使用ALTER SEQUENCE的用户必须是该序列的所有者。当前版本仅支持修改拥有者、归属列和最大值。若要修改其他参数,可以删除重建,并用Setval函数恢复当前值。ALTER SEQUENCE MAXVALUE不支持在事务、函数和存储过程中使用。修改序列的最大值后,会清空该序列在所有会话的cache。ALTER SEQUENCE会阻塞nextval、setval、currval和lastval的调用。语法格式修改序列最大值或归属列。name将要修改的序列名称。IF EXISTS当序列不存在时使用该选项不会出现错误消息,仅有一个通知。MAXVALUE maxvalue | NO MAXVALUE序列所能达到的最大值。如果声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE。OWNED BY将序列和一个表的指定字段进行关联。这样,在删除那个字段或其所在表的时候会自动删除已关联的序列。如果序列已经和表有关联后,使用这个选项后新的关联关系会覆盖旧的关联。关联的表和序列的所有者必须是同一个用户,并且在同一个模式中。使用OWNED BY NONE将删除任何已经存在的关联。new_owner序列新所有者的用户名。用户要修改序列的所有者,必须是新角色的直接或者间接成员,并且那个角色必须有序列所在模式上的CREATE权限。
-
为了快速访问,而在内存中预先存储序列号的个数。一个缓存周期内,CN不再向GTM索取序列号,而是使用本地预先申请的序列号。缺省值为1,表示一次只能生成一个值,也就是没有缓存。【注意】不建议同时定义cache和maxvalue或minvalue。因为定义cache后不能保证序列的连续性,可能会产生空洞,造成序列号段浪费。建议cache值不要设置过大,否则会出现缓存序列号时(每个cache周期的第一个nextval)耗时过长的情况;同时建议cache值小于100000000。实际使用时应根据业务设置合理的cache值,既能保证快速访问,又不会浪费序列号。为了快速访问,而在内存中预先存储序列号的个数。一个缓存周期内,CN不再向GTM索取序列号,而是使用本地预先申请的序列号。缺省值为1,表示一次只能生成一个值,也就是没有缓存。【注意】不建议同时定义cache和maxvalue或minvalue。因为定义cache后不能保证序列的连续性,可能会产生空洞,造成序列号段浪费。建议cache值不要设置过大,否则会出现缓存序列号时(每个cache周期的第一个nextval)耗时过长的情况;同时建议cache值小于100000000。实际使用时应根据业务设置合理的cache值,既能保证快速访问,又不会浪费序列号。用于使序列达到maxvalue或者minvalue后可循环并继续下去。如果声明了NO CYCLE,则在序列达到其最大值后任何对nextval的调用都会返回一个错误。NOCYCLE的作用等价于NO CYCLE。缺省值为NO CYCLE。若定义序列为CYCLE,则不能保证序列的唯一性。
-
CREATE SEQUENCE用于向当前数据库里增加一个新的序列。序列的Owner为创建此序列的用户。注意事项Sequence是一个存放等差数列的特殊表,该表受DBMS控制。这个表没有实际意义,通常用于为行或者表生成唯一的标识符。如果给出一个模式名,则该序列就在给定的模式中创建,否则会在当前模式中创建。序列名必须和同一个模式中的其他序列、表、索引、视图或外表的名字不同。创建序列后,在表中使用序列的nextval()函数和generate_series(1,N)函数对表插入数据,请保证nextval的可调用次数大于等于N+1次,否则会因为generate_series()函数会调用N+1次而导致报错。不支持在template1数据库中创建SEQUENCE。name将要创建的序列名称。取值范围: 仅可以使用小写字母(a~z)、 大写字母(A~Z),数字和特殊字符"#","_","$"的组合。increment指定序列的步长。一个正数将生成一个递增的序列,一个负数将生成一个递减的序列。缺省值为1。MINVALUE minvalue | NO MINVALUE| NOMINVALUE执行序列的最小值。如果没有声明minvalue或者声明了NO MINVALUE,则递增序列的缺省值为1,递减序列的缺省值为-263-1。NOMINVALUE等价于NO MINVALUEMAXVALUE maxvalue | NO MAXVALUE| NOMAXVALUE执行序列的最大值。如果没有声明maxvalue或者声明了NO MAXVALUE,则递增序列的缺省值为263-1,递减序列的缺省值为-1。NOMAXVALUE等价于NO MAXVALUE
-
序列Sequence是用来产生唯一整数的数据库对象。序列的值是按照一定规则自增的整数。因为自增所以不重复,因此说Sequence具有唯一标识性。因此,在数据库中Sequence常常被作为主键使用。通过序列使某字段成为唯一标识符的方法有两种:是声明字段的类型为序列整型,由数据库在后台自动创建一个对应的Sequence。使用CREATE SEQUENCE自定义一个新的Sequence,然后将nextval(‘sequence_name’)函数读取的序列值,指定为某一字段的默认值,这样该字段就可以作为唯一标识符。方法一: 声明字段类型为序列整型来定义标识符字段。方法二: 创建序列,并通过nextval(‘sequence_name’)函数指定为某一字段的默认值。这种方式更灵活,可以为序列定义cache,一次预申请多个序列值,减少与GTM的交互次数,来提高性能。除了为序列指定了cache,方法二所实现的功能基本与方法一类似。但是一旦定义cache,序列将会产生空洞(序列值为不连贯的数值,如:1.4.5),并且不能保序。另外为某序列指定从属列后,该列删除,对应的sequence也会被删除。 虽然数据库并不限制序列只能为一列产生默认值,但最好不要多列共用同一个序列。当前版本只支持在定义表的时候指定自增列,或者指定某列的默认值为nextval(‘seqname’), 不支持在已有表中增加自增列或者增加默认值为nextval(‘seqname’)的列。
-
序列操作函数nextval(),setval() 等均不支持回滚。另外setval设置的新值,会对当前会话的nextval立即生效,但对其他会话,如果定义了cache,不会立即生效,在用尽所有缓存的值后,其变动才被其他会话感知。所以为了避免产生重复值,要谨慎使用setval,设置的新值不能是已经产生的值或者在缓存中的值。如果必须要在bulkload场景下产生默认序列值,则一定要为newSeq1定义足够大的cache,并且不要定义Maxvalue或者Minvalue。数据库会试图将nextval(‘sequence_name’)的调用下推到Data Node,以提高性能。 目前GTM对并发的连接请求是有限制的,当Data Node很多时,将产生大量并发连接, 这时一定要控制bulkload的并发数目,避免耗尽GTM的连接资源。如果目标表为复制表(DISTRIBUTE BY REPLICATION)时下推将不能进行。当数据量较大时,这对数据库将是个灾难。除了性能问题之外,空间也可能会剧烈膨胀,在导入结束后,需要用vacuum full来恢复。最好的方式还是如上建议的,不要在bulkload的场景中产生默认序列值。另外,序列创建后,在每个节点上都维护了一张单行表,存储序列的定义及当前值,但此当前值并非GTM上的当前值,只是保存本节点与GTM交互后的状态。如果其他节点也向GTM申请了新值,或者调用了Setval修改了序列的状态,不会刷新本节点的单行表,但因每次申请序列值是向GTM申请,所以对序列正确性没有影响。
-
[应用案例] sql产生报错:ERROE:dn_xxxx_xxxx:numeric field overflow;DETAIL: A field with precision 18,scale 2 must round to an absolute..一、背景客户在执行业务sql产生报错:testdb=> select max(a) from ( select cast(coalesce(t1.b,0) as decimal(18,2)) as a from t1 left join b .... group by a);ERROR: dn_xxxx_xxxx:numeric field overflowDETAIL: A field with precision 18,scale 2 must round to an absolute value less than 10^16.该报错为中间结果集溢出,修改为decimal为19位后查询最大值。发现max的结果为:testdb=>select max(a) from ( select cast(coalesce(t1.b,0) as decimal(19,2)) as a from t1 left join b .... group by a); max---------------------11001152438310.00其中最大值 11 0011 5243 8310.00,只有14位整数,decimal(18,2)实际存储的整数位数应该是18-2=16位,最大值并不溢出。为何会产生报错呢。二、原因中间排查了很久,一直在原地打转。后大佬灵光一闪,查了一下最小值。testdb=>select min(a) from ( select cast(coalesce(t1.b,0) as decimal(19,2)) as a from t1 left join b .... group by a); min----------------------13194682580278417.41最小值为-1 3194 6825 8027 8417.41,一共17位整数,加上2位小数,故decimal(18,2)溢出,但decimal(19,2)能查出结果。为什么查询最大值会去遍历最小值呢,因为sql最后一句testdb=>select min(a) from ( select cast(coalesce(t1.b,0) as decimal(19,2)) as a from t1 left join b .... group by a);子查询先进行分组,故进行遍历查询了t1.b列最小值,所以中间结果溢出,父查询只要最大值,看起来就像没溢出。补充:这里做个分享给大家,这个报错有点反逻辑,大部分人会认为max就是最大,从而忽略min,但在计算机中,不应该忽视最小值。
-
目前的DWS 版本8.1.1.5的升级稳定版本的途径是不是8.1.1.5-》8.1.3-ESL.8.SP1 -》8.2.1-ESL.8目前这种升级方式有银行据点升级过没?使用上是否有什么问题?有直升8.1.1.x-》8.2.1.x的版本发布计划?
-
一、背景客户在执行业务sql产生报错:testdb=> select * from ft_test0520;ERROR: Login failed on cn_5002, check your principal and keytab检查pg_log最新的cn日志,多看几行,可以找到以下提示信息。[HDFS] LOG: failed to kinit: Cannot contact any KDC for realm ‘UATX_ABCDEF.MRS.ABCD.COM’,error_code=12345678[HDFS] STATEMENT : insert into schemaname.tablename select * from ft_test0520;[HDFS] ERROR: Login failed on cn_5002,check your principal and keytab.二、原因这个报错注意标红的信息。查看cat krb5.conf文件里面是这样的[realms]UATX_ABCDEF.MRS.ABCD.COM ={kdc=12.345.456.13:21732kdc=12.345.456.14:21732admin_server=53.192.1463:z1/3admin_server =12.345.456.14:2173kpasswd_server=12.345.456.13:21731Kpasswd_server=12.345.456.14:21731kpasswd_port=21731Kadmind_port=21730Kadmind_listen=12.345.456.14:21730Kpasswd_listen=12.345.456.14:21731……[domain_realm].uatx_abcdef.mrs.abcd.com = UATX_ABCDEF.MRS.ABCD.COM…….问题根因:kdc指向的ip网络不同,网络不通各种各样的问题,这里是由于路由没加三、解决1、沙箱里ssh或者沙箱外curl一下,此处用curl有返回即通curl –kv 协议:ip:端口2、如果不通,加一下路由route add –net route_ip/24 dev bond_name gw gw_ip补充:这里做下记录,因为遇到很多次了,虽然遇到我已经很熟练了,做个分享给大家。
-
手动迁移同构数据-较大批量篇写在最前面,该文只做为一个案例的分享,或者说思路的引导。实际上该案例不完全,无法作为一个标准方案来完成迁移。因为互联互通本文只介绍了一张表的互通,实际使用中,需要自己写脚本完成所有table的迁移。且互联互通有一定的版本要求,该方案限制较多。要求:数据大于3T,且不大于100T 1、 元数据1.1导出元数据注意a、 该方法分库导出,有多个业务库,起多个进程b、 确保网络已打通c、 以下命令中--non-lock-table不锁表,--no-tablespaces不输出选择表空间,–s 只转储对象定义(模式),而非数据,–C 备份文件以创建数据库和连接到创建的数据库的命令开始d、 该命令只导出元数据,不导出数据nohup gs_dump testdb –h 132.132.123.123 –U mgt –W xxx –p 8000 --non-lock-table --no-tablespaces –s –C –f /DWS/data1/h0dn1/testdb.sql > /home/Ruby/migration/testdb_`data + ‘%F_%H’`.log 2>&1 & 实际测试导出集群存储空间:11.3TDatabase落地文件大小对象个数total time(ms)testdb185 M16972238302testdb228 M661361003 总耗时:4m 1.2 导入元数据nohup gsql postgresql://:8000/postgres?application_name=’OM’ –f /DWS/data1/h0dn1/testdb.sql > /home/Ruby/migration/import_testdb_`date + ‘%F_%H%M%S’`.log 2>&1 & 实际测试导入Database落地文件大小插入后库大小对象个数total time(ms)testdb185 M11 GB169723681421testdb228 M1505 M66131231562 总耗时:61m注意a、 不可并发b、 元数据导入非常慢 2、 准备工作2.1 互联互通导入创建互联互通server注:a、 重要,到对应数据库手动创建,每个库对应一个serverb、 address最好为elb(lvs)地址,gsfs为gds地址create server server_mgt foreign data wrapper gc_fdw options(address ‘132.132.123.123:8000’dbname ‘mgt’username ‘xxx’syncsrv ‘gsfs://132.45.132.10:50062| gsfs://132.45.132.156:50062| gsfs://132.45.132.216:50062’); #查看server\des+ server_mgt 启动gds注意a、 假设3个节点,最好启动3个gds(和节点数一样),gds越多,导入越快,但gds越多,并发高的时候,gds过于繁忙会达到操作系统的socket瓶颈,从而业务产生报错。从实际使用角度上说,与节点数一致是比较合适的b、 在每个节点的沙箱内启动,-p为节点对外地址#第1个节点gds –p 132.45.132.10:50062 –H 0.0.0.0/0 –d /DWS/data1/gds/50062 –D –t 100 –l /DWS/data1/gds/50062/50062.log --pipe-size 1M --pipe-timeout 300s #第2个节点gds –p 132.45.132.156:50062 –H 0.0.0.0/0 –d /DWS/data1/gds/50062 –D –t 100 –l /DWS/data1/gds/50062/50062.log --pipe-size 1M --pipe-timeout 300s #第3个节点gds –p 132.45.132.216:50062 –H 0.0.0.0/0 –d /DWS/data1/gds/50062 –D –t 100 –l /DWS/data1/gds/50062/50062.log --pipe-size 1M --pipe-timeout 300s 网络1)防火墙注a、 互联互通情况下源端集群和目的端集群的防火墙都需要增加相应防火墙配置b、 目的端和源端都需添加gds所在ip和端口#沙箱外,root用户增加防火墙配置iptables –I INPUT –s 132.45.132.0/24 –p tcp --dport 50062 –j accept #沙箱外,root用户查看防火墙配置iptables –L #重启生效systemctl restart iptables #如果重启失效了,就写入持久化配置vi /etc/sysconfig/iptables#插入-A INPUT –p tcp –m state --state NEW –m tcp –s 132.45.132.0/24 --dport 50062 –j ACCEPT#需重启写入systemctl restart iptables #如果嫌上面麻烦,客户同意的情况下可以直接关掉防火墙,注意迁移完毕记得打开systemctl stop iptablessystemctl start iptables 2)路由#记得添加路由route add –net 132.45.132.0/24 dev bond0.3579 gw 132.132.123.254 #bond查看,ip a中对外ip同一行显示的bond就是对外ip所用的bondip a | grep 132 #网关查看,route –n查看,一般是对外ip,最后8位变成254#比如,本地的对外ip是132.45.132.10,gataway是132.45.132.254 3)安全组 云上环境的console界面网络->网络控制台->访问控制->安全组->打开对应集群规则->入方向规则->添加规则4)其他判断网络是否打通手动测试互联互通命令是否能写入数据注a、 关于为什么在目标端会有源端表结构:因为元数据部分我们已经把元数据导入成功。b、 互联互通外表注意事项可参考产品文档章节《基于GDS的跨集群互联互通》#测试目标端#在目标端创建临时表create table tmp_import.aa_bb_info as select * from aa.bb_info where 1=2; #在目标端创建外表create foreign table import_ft. aa_bb_info(like tmp_import.aa_bb_info)server server_mgt options(schema_name ‘aa’,table_name ‘bb_info’encoding ’utf8’); #测试插入数据insert into aa.bb_info select * from import_ft. aa_bb; #插入完毕记得删除中间tabledrop table import_ft. aa_bb;drop table tmp_import.aa_bb_info; #如果要保留原表记得analyse analyse aa.bb_info; 源端最好也测试一下(虽然不会在源端操作)#测试源端#在源端创建临时表create table tmp_export.aa_bb_info as select * from aa.bb_info where 1=2; #在源端创建外表create foreign table export_ft. aa_bb_info(like tmp_export.aa_bb_info)server server_mgt options(schema_name ‘aa’,table_name ‘bb_info’encoding ’utf8’); #测试插入数据insert into export_ft. aa_bb select * from aa.bb_info; #插入完毕记得删除中间tabledrop table export_ft. aa_bb;drop table tmp_export.aa_bb_info;
上滑加载中
推荐直播
-
华为云码道Agent集成与鸿蒙实战2026/08/11 周二 19:00-21:00
王一男-华为云码道产品规划专家;李炎-华为云码道产品专家;彭江敏-华为云鸿蒙端云一体化开发专家
本次直播带你解读华为云码道7月份产品新特性、新功能。更有专家演示码道Agent Space × 钉钉机器集成实战,从0到1打通消息通道;码道鸿蒙端云一体化实战,快速搭建员工签到系统。
回顾中 -
华为云开发者AI素养直播课·第五期2026/09/04 周五 16:00-18:00
林华鼎-华为云AI开发者运营负责人;蒋春阳-华为云AI开发者案例开发专家
本期直播内容: AI工具体验营 · 第5-8课连讲。Agent-Team 多智能体协作完成毕业设计实践
回顾中 -
华为云开发者AI素养ClassRoom·第六期2026/09/08 周二 19:00-20:00
樊渊-2026华为软件挑战赛冠军
高手来了:看软挑高手解析二维排样问题—从工业难题到算法突破
回顾中
热门标签