Notas de estudio de Hive (dos) modelo de datos

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	17Time 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)

Supongo que te gusta

Origin blog.csdn.net/u013963379/article/details/89893788
Recomendado
Clasificación