Hive & Mysql 数据类型和文件格式

目录

数据类型问题:

基本数据类型

集合数据类型

分割符问题:

读时模式问题:

Mysql数据类型放几张网上截图, 非常棒

Mysql 枚举类型


数据类型问题:


基本数据类型


tinyint :1bit有符号整数


smallint :2bit有符号整数


int :4bit有符号整数


bigint :8bit有符号整数


boolean :布尔类型true或者false


float :单精度浮点数


double :双精度浮点数


string :字符序列。可以指定字符集。可以使用单引号或者双引号


timestamp :可以是整数小数字符串;代表unix新纪元时间1970年一月一日


binary - 0.8版本

decimal - 0.11版本

char - 0.13版本

varchar - 0.12版本

date - 0.12版本



集合数据类型



struct
map
array




例子:
CREATE TABLE employees
(
    name STRING COMMENT '张三',
    salary FLOAT COMENT '10000.00',
    subordinates ARRAY COMMENT '李四 王五',
    deductions MAP COMMENT '税,1000.00,养老金,100.00',
    address STRUCT COMMENT 'srteet:中华,city:北京,state:朝阳,zip:12'
);




 

 


分割符问题:


逗号分隔符:csv文件
制表符分隔符:tsv文件
\n 换行符
^A 用于分割字段(列),可以用\001表示
^B 用于分割ARRAY或者STRUCT中元素,或者MAP键值对之间分割,可以用\002
^C 用于分割MAP键值对之间分割,可用\003表示


例子:
CREATE TABLE employees
(
    name STRING,
    salary FLOAT,
    subordinates ARRAY,
    deductions MAP,
    address STRUCT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
COLLECTIONS TERMINATED BY '\002'
MAP KEYS TERMINATED BY '\003'
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;


ROW FORMAT DELIMITED必须写在前面,列分割符是\001 集合分隔符是\002 map分割符是\003 行分隔符是换行符(只能是它)使用textfile文件格式


 

 


读时模式问题:


传统数据库在用户写入数据时会对模式进行检查,是写时模式
hive在查询时进行检查,是写时模式。
当发现文件内容与模式不匹配时:
比如字段个数少于模式定义的个数,则会返回很多null值
某一字段时数值型的,但是返回时发现不是数值型,返回mull
其他情况下,hive会尽力将各种错误恢复过来。

 

 

 

Mysql数据类型放几张网上截图, 非常棒

Hive & Mysql 数据类型和文件格式_第1张图片

Hive & Mysql 数据类型和文件格式_第2张图片

Hive & Mysql 数据类型和文件格式_第3张图片

 

 

 

Mysql 枚举类型

USE testdb;

CREATE TABLE tickets (
    id INT PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    priority ENUM('Low', 'Medium', 'High') NOT NULL
);

priority列只接受三个Low, Medium, High值。 在后台,MySQL将每个枚举成员映射到数字索引。在这种情况下,LowMediumHigh分别映射到1,23(注意:与数组不同,这不是从0开始的)。
 

INSERT INTO tickets(title, priority) VALUES('Scan virus for computer A', 'High');
-- 我们使用的值为:1,而不是使用Low枚举值,因为Low被映射到1,这是可以接受的。
INSERT INTO tickets(title, priority) VALUES('Upgrade Windows OS for all computers', 1);

-- 请注意,如果ENUM列定义为可空列,则可以接受NULL值, 如果我们将优先级定义为NOT NULL列,当插入新行而不指定优先级列的值时,MySQL将使用第一个枚举成员作为默认值。
INSERT INTO tickets(title) VALUES('Refresh the computer of Ms. Lily');

-- MySQL根据索引号排序ENUM值。 因此,成员的顺序取决于它们在枚举列表中的定义

SELECT 
    title, priority
FROM
    tickets
ORDER BY priority DESC;

 

 

你可能感兴趣的:(03,Hive及数仓)