spark复制/导入另一张外部表并添加分区

spark可以直接通过各种驱动连接其他数据库,然后将表导入spark中

1.驱动

将驱动放到你的spark目录下:/spark/jars,然后重启spark

2. 先复制到一个临时表

CREATE table tmptable
USING org.apache.spark.sql.jdbc
OPTIONS (
  url 'jdbc:informix-sqli://192.111.22.33:4567/DATACENTER:INFORMIXSERVER=server',
  driver 'com.informix.jdbc.IfxDriver',
  dbtable 'DATACENTER.table_that_i_want',
  user 'informix',
  password 'informix',
  fetchsize '5000000'
);
CREATE table tmptable
USING org.apache.spark.sql.jdbc
OPTIONS (
  url 'jdbc:dm://192.111.22.33:4567/DATACENTER',
  driver 'dm.jdbc.driver.DmDriver',
  dbtable 'DATACENTER.table_that_i_want',
  user 'dm',
  password 'dm',
  fetchsize '5000000'
);

给了两种driver的例子。临时表是tmptable,然后利用各种你想连接不同类型数据库的driver(放到/spark/jars里且重启了),就可以将原来库里的表复制过来(我用临时表是因为还要分区,如果一条sql就执行完毕的话请大神留言告诉窝(o^^o)

3. 将临时表的数据分区插入到我们的目标表中

CREATE TABLE our_new_table partitioned by (date_partition) stored AS ORC AS SELECT *, date_format(create_time,'y-MM-dd') as date_partition FROM tmptable ;

4.然后就okurrrrrr了

5.其他

  1. 分区建表的时候partition字段不用真实存在,但是分桶的时候就必须在了
  2. 一开始写成了 CREATE TABLE our_new_table partitioned by (date_partition string) ,然后说在create的时候是不用指定类型的
  3. select date_format(date,type) 就可以直接抽取出对应的时间。 比如 select date_format(‘2021-01-01’,‘y-MM-dd’) 就会抽出 ‘2021-01-01’,而select date_format(‘2021-01-01’,‘y’) 就会抽出2021。very好用
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值