hive理解表的创建

fjaof16o  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(412)

我要去mooc。
它告诉我们使用下面的命令从pc上传一些文件到hdfs

azure storage blob upload local_path container data/logs/2008-01.txt.gz

我也这么做了。后来,当我在putty secure shell中键入以下命令时,我能够看到该文件

hdfs dfs -ls /data/logs
Found 6 items
-rwxrwxrwx   1     331941 2016-03-03 15:56 /data/logs/2008-01.txt.gz
-rwxrwxrwx   1     331941 2016-03-03 15:58 /data/logs/2008-02.txt.gz
-rwxrwxrwx   1     331941 2016-03-03 15:58 /data/logs/2008-03.txt.gz
-rwxrwxrwx   1     331941 2016-03-03 15:58 /data/logs/2008-04.txt.gz
-rwxrwxrwx   1     331941 2016-03-03 15:58 /data/logs/2008-05.txt.gz
-rwxrwxrwx   1     331941 2016-03-03 15:58 /data/logs/2008-06.txt.gz

然后我们开始了一个 hive 并首先创建一个表,然后使用

load data inpath '/data/logs' into TABLE rawlog;

然后我们使用下面的命令创建了一个外部表

CREATE EXTERNAL TABLE cleanlog
(log_date DATE,
log_time STRING,
c_ip STRING,
cs_username STRING,
s_ip STRING,
s_port STRING,
cs_method STRING,
cs_uri_stem STRING,
cs_uri_query STRING,
sc_status STRING,
sc_bytes INT,
cs_bytes INT,
time_taken INT,
cs_user_agent STRING,
cs_referrer STRING)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ' '
STORED AS TEXTFILE LOCATION '/data/cleanlog';

我们使用

INSERT INTO TABLE cleanlog
SELECT *
FROM rawlog
WHERE SUBSTR(log_date, 1, 1) <> '#';

我从Hive里出来,输入下面的命令

hdfs dfs -ls /data/logs

我在那个文件夹里什么都没看到,为什么?上传的日志文件去哪了?
原始记录表在哪里?它是否存在于同一文件夹中?为什么我看不见?
为什么在我的cleanlog文件夹中看到文件00000\u 0?是新table吗?如果我键入命令
hdfs dfs-ls/data/cleanlog
我得到的结果是

Found 1 items
-rwxr-xr-x   1 sshuser supergroup   71323206 2016-03-03 16:11 /data/cleanlog/000000_0

################

nbysray5

nbysray51#

如果不想丢失源文件夹中的数据,请使用外部表。看看这个问题:
配置单元中“load data inpath”和“location”之间的区别?
我在那个文件夹里什么都没看到,为什么?上传的日志文件去哪了?
它们已被删除,因为数据加载到表中,并且您使用的是在路径中加载数据,而不是在外部表中加载数据
原始记录表在哪里?它是否存在于同一文件夹中?为什么我看不见?
数据所在的文件夹中不存在表定义。在create table语句中,已经引用了要存储为/data/cleanlog的表数据的位置
看看下面关于hive在hdfs中存储文件的查询。
hive在hdfs中在哪里存储文件?
我已经在配置单元中创建了一个表,我想知道我的表是在哪个目录中创建的?
为什么在我的cleanlog文件夹中看到文件00000\u 0?是新table吗?
不是新table。在配置单元shell中执行此命令。

describe formatted <table_name>;

编辑:关于表的增量更新,请按照本文中的步骤和问题:配置单元中的增量/增量加载

gz5pxeao

gz5pxeao2#

----更新1
如果同时加载一个数据文件会发生什么 /data/logs/ 然后跑 select * from rawlog ? 它会自动从新文件中提取数据吗?

gjmwrych

gjmwrych3#

你使用了 LOAD 命令,将文件从原始位置移动到rawlog表的文件夹(默认情况下为 /hive/warehouse/rawlog ).

相关问题