clickhouse跟hive的不同

  1. 虽然clickhouse可以是多台机器,因为占用内存,每台机器存储不同的数据,所以需要有一个视图,将三台机器的数据进行汇总,原始表跟视图的创建语句如下

    --创建 clickhouse ,
    drop table dm.city_dim on cluster my_cluster;
    CREATE TABLE dm.city_dim on cluster my_cluster(
    	city_id Int32 comment '城市ID',
    	city_name String comment '城市名'
    )
    ENGINE=MergeTree
    ORDER BY city_id
    SETTINGS index_granularity = 8192;
    
    
    --创建 clickhouse 分布式视图表
    drop table dm.city_dim on cluster my_cluster;
    CREATE TABLE dm.city_dim on cluster my_cluster(
    	city_id Int32 comment '城市ID',
    	city_name String comment '城市名'
    )ENGINE = Distributed(my_cluster, dm, city_dim, rand());
    
  2. 怎么将hive的数据转到clickhouse中?

    1. 如果要删除原始数据,使用下面语句,

      /usr/bin/clickhouse-client --host xxxxxxxxxx --port xxxx --uxxxx bigdata --password xxxxxx --multiline -q "ALTER TABLE ods.xxxx DELETE WHERE 0=0"
       
      上面的语句需要在所有clickhouse机器上进行执行,否则只会删除一个机器上的数据
      
    2. 使用的工具是waterdrop,所使用的命令如下

      start-waterdrop.sh --master local[4] --deploy-mode client --config click_house.cfg
      
      click_house.cfg配置文件如下
      
      spark {
        spark.app.name = "city_name"
        spark.executor.instances = 1
        spark.executor.cores = 4
        spark.executor.memory = "1g"
        spark.sql.catalogImplementation = "hive"
      }
      
      input {
        hive {
      
          pre_sql = "select city_id, city_name from dim.city_dim"
      
          table_name = "city_dim"
        }
      }
      
      filter {
      }
      
      output {
        clickhouse {
          host = "xxxx:xxxx,xxxx:xxxx,xxxx:xxxx"
      
          database = "dm"
      
          table = "city_dim"
      
          fields = ["city_id","city_name"]
          clickhouse.socket_timeout = 120000
          username = "xxxx"
          password = "xxxx"
          bulk_size = 20000
        }
      }
      
      然后进行批量导入处理
      
  3. hive sql 跟clickhouse sql 有什么不同呢?

    1. left join后,右边没有关联的部分,在hive中是null,在clickhouse中关联字段是整数的时候,是0,字符串类型关联的时候是’’
    2. 时间戳转化成日期的函数不同
      1. hive select from_unixtime(1603123200, ‘yyyyMMdd’)
      2. ck select toDate(1603123200)
    3. 时间戳转化成时间的函数不同
      1. hive select from_unixtime(1605505769, ‘yyyyMMdd HHmmss’)
      2. ck select toDateTime(1605505769)
    4. 日期减天数
      1. hive select date_sub(from_unixtime(unix_timestamp(‘20201116’, ‘yyyyMMdd’), ‘yyyy-MM-dd’), 30)
      2. ck select subtractDays(toDate(concat(substr(‘20201116’,1,4), ‘-’, substr(‘20201116’,5,2), ‘-’, substr(‘20201116’,7,2))), 30)
  4. 如果某个字段会出现null的情况,ck定义表中字段类型的时候,使用Nullable包上对应的数据类型

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值