Cinco modelos de datos de una colmena
1 mesa interna
1) Cree una tabla interna, que sea
equivalente al directorio HDFS / usuario / colmena / almacén donde se almacenan las tablas MySQL de forma predeterminada
create table emp
(empno int,
ename string,
job string,
mgr int,
hiredate string,
sal int,
comm int,
deptno int
)row format delimited fields terminated by ',';
2) Importar datos
load data inpath '/scott/emp.csv' into table emp; -- 导入HDFS的数据,是剪切
load data local inpath '/root/temp/*****' into table emp; --导入本地Linux的数据,是复制
2 Mesa externa
1) Crea una tabla externa
hive> create external table fz_external_table(id int,name string,age int,tel string)
> ROW FORMAT DELIMITED
> FIELDS TERMINATED BY ','
> STORED AS TEXTFILE
> location '/user/hive/external/fz_external_table'; --hive外部表存储的位置
La palabra clave externa debe agregarse al crear la tabla externa. Especifiqué la ubicación al crear la tabla. Por supuesto, no es necesario especificarla. Si no se especifica, la ruta especificada por hive.metastore.warehouse.dir es utilizado por defecto.
2) Importar datos
Prepare el archivo de datos fz_external.txt de antemano, los datos son los mismos que los anteriores, pero se cambia el nombre.
1,fz,25,13188888888888
2,test,20,13222222222
3,dx,24,183938384983
4,test1,22,1111111111
Operación de importación:
hive> load data local inpath '/Users/FengZhen/Desktop/Hadoop/hive/testfile/fz_external_table.txt' into table fz_external_table;
Loading data to table default.fz_external_table
Table default.fz_external_table stats: [numFiles=0, totalSize=0]
OK
Time taken: 0.224 seconds
Vea los datos en la tabla.
hive> select * from fz_external_table;
OK
fz 25 13188888888888
test 20 13222222222
dx 24 183938384983
test1 22 1111111111
Time taken: 0.06 seconds, Fetched: 4 row(s)
Ahora que los datos se han importado correctamente, vaya a HDFS para verificar lo siguiente, en la ruta especificada por ubicación
rooot@master$ hadoop fs -ls /user/hive/external/fz_external_table;
Found 1 items
-rwxr-xr-x 1 FengZhen supergroup 88 2017-06-06 13:44 /user/hive/external/fz_external_table/fz_external_table.txt
Como puede ver, al importar datos a una tabla externa, los archivos de datos del sistema de archivos local también se copian en HDFS.
Ahora eliminemos la tabla externa para ver si se ha eliminado el archivo en HDFS.
hive> drop table fz_external_table;
OK
Time taken: 0.103 seconds
La tabla externa se ha eliminado correctamente, mire el HDFS
root@master$ hadoop fs -ls /user/hive/external/fz_external_table;
Found 1 items
-rwxr-xr-x 1 FengZhen supergroup 88 2017-06-06 13:44 /user/hive/external/fz_external_table/fz_external_table.txt
Se puede ver que los archivos de datos en HDFS siguen existiendo incluso cuando se elimina la tabla, es decir, para eliminar una tabla externa, solo se pueden eliminar los datos de la tabla, pero no se puede eliminar el archivo de datos.
Mesa de 3 particiones
Principalmente para optimizar la consulta, no es necesario escanear los datos en todas las tablas, siempre que vea los datos de la tabla correspondiente
1) Cree una tabla de particiones
create table art_dt(sentence string)
partitioned by (dt string)
row format delimited fields terminated by '\n';
2) Insertar datos
insert overwrite table art_dt partition(dt='20190420')
select * from art_ext limit 100;
insert overwrite table art_dt partition(dt='20190421')
select * from art_ext limit 100;--sql做数据的etl,或者统计分析等的处理逻辑
3) Ver el número de particiones
show partitions art_dt;
Mesa de 4 barriles
¡Necesita consultar los datos de la tabla actualmente en colmena para agruparlos, principalmente para muestrear y ver datos!
1) Cree la tabla de depósitos
-1. Genere el
archivo de datos de la tabla auxiliar bucket_test.txt
1
2
3
4
5
6
...
32
--1.生成辅助表
create table bucket_num(num int);
load data local inpath '/home/badou/Documents/data/hive/bucket_test.txt'
into table bucket_num;
–2. Cada número entra en un depósito.
–2.1 Crear una tabla (establecer la información de metadatos de la tabla)
set hive.enforce.bucketing = true;
create table bucket_test(num int)
clustered by(num)
into 32 buckets;
2.2 Consultar datos e importarlos a la tabla correspondiente
insert overwrite table bucket_test
select cast(num as int) as num from bucket_num;
3) Muestreo
--sample
select * from bucket_test tablesample(bucket 1 out of 32 on num);
--第一个bucket,00_0,32
select * from bucket_test tablesample(bucket 1 out of 16 on num);
--第1个和第17个bucket:00_0和16_0, 32和16
对于桶表关键点的理解是如何去抽样?对于此会单独写一篇博文来阐述.
--测试1/2个bucket:
set hive.enforce.bucketing = true;
create table bucket_test4(num int)
clustered by(num)
into 4 buckets;
insert overwrite table bucket_test4
select num from bucket_num;
select * from bucket_test4 tablesample(bucket 1 out of 8 on num);
--数据没有分桶,怎么采样数据?
select * from bucket_test4 where num%10>0;
Vistas 5
Explique la vista desde la perspectiva de MySQL: la
vista es una ventana lógica compuesta por datos seleccionados de la tabla básica de la base de datos, a diferencia de la tabla básica, es una tabla virtual. En la base de datos, solo se almacena la definición de la vista y los elementos de datos contenidos en la vista no se almacenan, estos elementos aún se almacenan en la estructura de la tabla básica original.
La vista se puede definir como una conexión de varias tablas, o se puede definir como solo una parte de las columnas visibles o una parte de las filas visibles.
Razones para introducir vistas:
1 puede simplificar las declaraciones SQL
2 mejorar la seguridad de los datos
3 los usuarios pueden comprender los datos desde diferentes ángulos
4 la vista es una tabla lógica independiente
Los beneficios de la introducción de vistas:
permiten a los desarrolladores centrarse en los datos Para los datos requeridos, no hay necesidad para mirar esos datos innecesarios y perder tiempo, y también mejora la eficiencia del desarrollo.
Vistas de Hive Las vistas de
Hive no almacenan datos, es decir, la versión actual no admite vistas materializadas.
1) Crea una mesa auxiliar
create table emp(name string,age int,gender string)
row format delimited fields terminated by ',';
Datos de importacion
load data local inpath '/root/sutdent.txt' into table emp;
2) Crea una vista
create view test_view
as
select * from emp
3) Ver datos de vista
hive (default)> select * from test_view;
OK
lisa 18 女
Elia 22 女
jack 19 男
tom 17 男
Time taken: 0.403 seconds, Fetched: 4 row(s)
4) Eliminar la vista
drop view test_view; --跟删除表不一样
5) Ver también se puede utilizar para copiar
--只是复制了表结构,并无数据
create table test_view2
like test_view
6) Puntos a tener en cuenta en la vista de colmena:
- La vista es de solo lectura. Para la vista, solo se permite cambiar la información del atributo TBLPROPERTIES en los datos del miembro:
ALTER VIEW test_view SET TBLPROPERTIES(‘crated_at’='some_timestamp')
- La vista no se puede utilizar como la tabla de destino de la instrucción de inserción o el comando de carga
- Eliminar vista con soltar vista test_view;
7) Ver información de metadatos de la vista (aplicable a otros modelos de datos)
describir
hive (default)> desc test_view;
OK
name string
age int
gender string
Time taken: 0.136 seconds, Fetched: 3 row(s)
describir extendido
hive (default)> describe extended test_view;
OK
name string
age int
gender string
Detailed Table Information Table(tableName:test_view, dbName:default, owner:root, createTime:1557252551, lastAccessTime:0, retention:0, sd:StorageDescriptor(cols:[FieldSchema(name:name, type:string, comment:null), FieldSchema(name:age, type:int, comment:null), FieldSchema(name:gender, type:string, comment:null)], location:null, inputFormat:org.apache.hadoop.mapred.TextInputFormat, outputFormat:org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat, compressed:false, numBuckets:-1, serdeInfo:SerDeInfo(name:null, serializationLib:null, parameters:{}), bucketCols:[], sortCols:[], parameters:{}, skewedInfo:SkewedInfo(skewedColNames:[], skewedColValues:[], skewedColValueLocationMaps:{}), storedAsSubDirectories:false), partitionKeys:[], parameters:{transient_lastDdlTime=1557252551}, viewOriginalText:select * from emp, viewExpandedText:select `emp`.`name`, `emp`.`age`, `emp`.`gender` from `default`.`emp`, tableType:VIRTUAL_VIEW, rewriteEnabled:false)
Time taken: 0.331 seconds, Fetched: 5 row(s)