数据是一个 CSV 文件,示例如下:
"InvoiceID","PayerAccountId","LinkedAccountId","RecordType","ProductName","RateId","SubscriptionId","PricingPlanId","UsageType","Operation","AvailabilityZone","ReservedInstance","ItemDescription","UsageStartDate","UsageEndDate","UsageQuantity","Rate","Cost"
"Estimated","xxxxxxxxxxxx","xxxxxxxxxxxx","LineItem","Amazon Simple Queue Service","16850885","1846142824","1292565","CNN1-Requests-Tier1","GetQueueAttributes","","N","First 1,000,000 Amazon SQS Requests per month are free","2019-01-01 00:00:00","2019-01-01 01:00:00","60.0000000000","0.0000000000","0.0000000000"
"Estimated","xxxxxxxxxxxx","xxxxxxxxxxxx","LineItem","Amazon Simple Queue Service","16850885","1846142824","1292565","CNN1-Requests-Tier1","GetQueueUrl","","N","First 1,000,000 Amazon SQS Requests per month are free","2019-01-01 00:00:00","2019-01-01 01:00:00","180.0000000000","0.0000000000","0.0000000000"
第一行是每个字段的名字,后面的行是相应的数据。
如果想用 Hive 进行分析,按照如下方式建表,得到的每一个字段内容都会包含双引号,不方便分析。
hive > CREATE EXTERNAL TABLE IF NOT EXISTS
aws_bill (
InvoiceID string,
PayerAccountId string,
LinkedAccountId string,
RecordType string,
ProductName string,
RateId string,
SubscriptionId string,
PricingPlanId string,
UsageType string,
Operation string,
AvailabilityZone string,
ReservedInstance string,
ItemDescription string,
UsageStartDate string,
UsageEndDate string,
UsageQuantity double,
Rate double,
Cost double
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
LOCATION 's3://feichashao-hadoop/bill/';
hive> select * from aws_bill
"Estimated","xxxxxxxxxxxx","xxxxxxxxxxxx","LineItem","Amazon Simple Queue Service","16850885","1846142824","1292565","CNN1-Requests-Tier1","GetQueueAttributes","","N","First 1,000,000 Amazon SQS Requests per month are free","2019-01-01 00:00:00","2019-01-01 01:00:00",NULL,NULL,NULL
而期望的结果是,字段中不含有双引号。
Hive 没有原生的方法来去除字段中的双引号。不过我们可以在建表的时候,使用 CSV Serde[2]。
建表的方法如下:
Hive > CREATE EXTERNAL TABLE IF NOT EXISTS
aws_bill_serde (
InvoiceID string,
PayerAccountId string,
[...省略...]
Cost double)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde'
LOCATION 's3://feichashao-hadoop/bill/';
这样建表,select * from aws_bill_serde 得到的结果没有双引号。
数据是一个 CSV 文件,示例如下:"InvoiceID","PayerAccountId","LinkedAccountId","RecordType","ProductName","RateId","SubscriptionId","PricingPlanId","UsageType","Operation","AvailabilityZone","ReservedInstance","I...
1.UDF描述:
(1) 用户自定义函数(UDF)是一个允许用户扩展
Hive
QL的强大的功能。用户可以使用Java编写自己的UDF,一旦将用户自定义函数加入到用户会话
中
(交互式的或者通过脚本执行的),它们就将和内置的函数一样使用,甚至可以提供联机帮助。
Hive
具有多种类型的用户自定义函数,每一种都会针对输入数据执行特定“一类”的转换过程。
(2)在ETL处理
中
,ETL(是指:ETL是将业务系...
一. 对于
CSV
的读写既可以像读写txt文件似的读写//读文件
InputStreamReader read = new InputStreamReader(
new FileInputStream(file),encoding);//考虑到编码格式
BufferedReader bufferedReader = new BufferedReader(
如题,在
Hive
中
导入S3
中
的
CSV
文件,
CSV
文件
中
有某些
字段
又是json串,而且还有数组,
Hive
将S3桶
中
的
CSV
文件导入表就不在这里说了,参照我另一篇就行,
Hive
将
CSV
文件导入表。
导入表以后我们可以得到囊括了所有
CSV
字段
数据的一张大表,而我们需要解析json
字段
将其放到一张新表里,哦对了,先把数据拿出来一条给大家看看。。。。
LVYPDBAA0KP078772, ,“35...
用公司的大数据平台导数,已经开发上线一个多月的一批报表,突然有同事说有个报表数据不准。出在时间
字段
上。
1、先看了原数据My
SQL
字段
类型为datetime,目标
字段
为string类型;
2、经发现所有时间的差距都是8小时,怀疑是因为时区转换的原因;
3、对比其他表,看看是大范围现象还是特殊情况,发现其他的同样情况
字段
的一样没有问题
二、解决办法
经过对比:sqoop在转换My
SQL
的datatime
字段
类型为
hive
的string时会出现问题:默认先转为对应时间戳,再转换为北京市区时间,就会使时间多8小时。
解决办法有两个:
1、在
sql
里将时间
字段
转换为
问题说明有时第三方提供的,导入进
Hive
表
中
的数据会清洗的不彻底,这里要说的就是遗留引号(“) 的问题。比如
hive
> select * from test;
1 "tom" 111
2 "cat" 222
3 "jack" 333
4 "hello" 444处理后为
hive
> select * from test;
a b c
1 tom 111
userid int,sex string
row FORMAT DELIMITED fields TERMINATED BY '\001' STORED AS TEXTFILE
b. desc 查看表结构
2.建分区表
CREATE table dtjd.atestuser (
userid int,sex string
PARTITIONED BY (username string)
Hive
到0.13.0版本为止已经支持越来越多的数据类型,像传统数据库
中
的VCHAR、CHAR、DATE以及所特有的复合类型MAP、STRUCT等。
Hive
中
的数据类型可以分为数值类型、字符串类型、日期时间类型、复合类型以及其它类型,下面分别予以介绍。
Hive
中
的数值类型与Java
中
的数值类型很相似,区别在于有些类型的名称不一样,可以概括为如下的表格: