ClickHouse HDFS表引擎

ClickHouse最重要的表引擎MergeTree家族系列:
MergeTree家族
其他表引擎:

Hdfs表引擎:

create table tableName(xxx type,...)engine =HDFS(url,fomat);

a:创建新的文件
先创建一个文件夹:

hdfs dfs -mkdir  /user/hive/warehouse/test.db/hdfsTest/

创建表并插入数据

 create table hdfsTest(id Int16,name String)
 engine=HDFS('hdfs://node01:8020/user/hive/warehouse/test.db/hdfsTest/a.csv','CSV');
 insert into hdfsTest values(1,'zhangsan');

如果上面insert into 报不能打开,权限异常的话,更改文件夹的权限:

hdfs dfs -chmod 777  /user/hive/warehouse/test.db/hdfsTest/
或者
hdfs dfs -chown -R clickhouse:clickhouse /user/hive/warehouse/test.db/hdfsTest/

查看hdfs:

[root@node01 ~]#hdfs dfs -text  /user/hive/warehouse/test.db/hdfsTest/a.csv
1,"zhangsan"

b hdfs已有数据

[root@node01 ~]#hdfs dfs -cat /user/hive/warehouse/test.db/one/*
1,zhangsan
2,lisi
create table hdfsTest1(id Int16,name String) 
engine = HDFS('hdfs://node01:8020/user/hive/warehouse/test.db/one/*','CSV');

select * from hdfsTest1;
┌─id─┬─name─────┐
│  1 │ zhangsan │
│  2 │ lisi     │
└────┴──────────┘

但是执行插入会报错:

insert  into hdfsTest1 values(3,'zhaoliu') ;
Code: 76. DB::Exception: Received from localhost:9000. 
DB::Exception: URI 'hdfs://node01:8020/user/hive/warehouse/test.db/one/*' 
contains globs, so the table is in readonly mode. 

总结:ab两种方式的区别在于,url指向的路径中是否包含有内容,如果没有内容,那么可读可写,如果有内容,则只读.
(url,format)中的format常见的有CSV(逗号分隔)TSV(tab分隔),JSON
如果使用的一行的json格式{"id":1,"name":"zhangsan","age":11}请使用JSONEachRow
详细的format参见format格式
url的路径匹配模式:
*:匹配任意字符 /user/hdfsTest/a*读取所有a开头的文件
?:匹配单个字符 /user/hdfsTest/a?.txt 读取比如aa.txt,ab.txt…
{a,b,c}:匹配其中任一 /user/hdfsTest/{a,b,c}.txt 匹配a.txt b.txt和c.txt
{x…x}: 匹配数字区间 /user/hdfsTest/{1…5}.txt 匹配1.txt 2.txt … 5.txt

另外读取hdfs数据还有一种表函数:hdfs(url,format,structure)
比如上方

create table hdfsTest1(id Int16,name String) 
engine = HDFS('hdfs://node01:8020/user/hive/warehouse/test.db/one/*','CSV');
``
可以使用下面的替代
```sql
create table hdfsTest3 engine = MergeTree order by id  
as select * from 
hdfs('hdfs://node01:8020/user/hive/warehouse/test.db/one/*','CSV','id Int8,name String') ;
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值