hive理解表创建

时间:2016-03-03 16:27:23

标签: hadoop hive hdfs

我正在接受mooc

它告诉我们使用以下命令将一些文件从我们的PC上传到hdfs

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

我做了同样的事情。 后来当我在PUTTY安全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) <> '#';

我退出了蜂巢并输入了以下命令

hdfs dfs -ls /data/logs
  1. 我在那个文件夹里看不到任何东西,为什么?上传日志的地方 文件去?
  2. rawlog表在哪里?它存在于同一个文件夹中吗?为什么我不明白呢?
  3. 为什么我在cleanlog文件夹中看到文件00000_0?这是新的 表?如果我输入命令

    hdfs dfs -ls / data / cleanlog

  4. 我得到的输出是

    Found 1 items
    -rwxr-xr-x   1 sshuser supergroup   71323206 2016-03-03 16:11 /data/cleanlog/000000_0
    
    ################ ----------------------------------更新1
    1. 如果在/data/logs/和另外加载一个数据文件会发生什么? 然后运行select * from rawlog?它会自动提取数据吗? 来自新文件?

2 个答案:

答案 0 :(得分:2)

如果您不想丢失源文件夹中的数据,请使用外部表。看看这个SE问题:

Difference between `load data inpath ` and `location` in hive?

  
      
  1. 我在那个文件夹里看不到任何东西,为什么?上传的日志文件去了哪里?
  2.   

它们已被删除,因为数据已加载到表中,并且您已在路径中使用了加载数据而不是外部表

  
      
  1. rawlog表在哪里?它存在于同一个文件夹中吗?为什么我不明白呢?
  2.   

数据所在的文件夹中不存在表定义。在create table语句中,您已经引用了要存储为/ data / cleanlog

的表数据的位置

查看下面有关hive在hdfs中存储文件的位置的查询。

Where does Hive store files in HDFS?

I have created a table in hive, I would like to know which directory my table is created in?

  
      
  1. 为什么我在cleanlog文件夹中看到文件00000_0?它是新桌子吗?
  2.   

这不是新桌子。在hive shell中执行此命令。

describe formatted <table_name>;

编辑:关于对表格的增量更新,请按照此article和以下问题执行以下步骤:Delta/Incremental Load in Hive

答案 1 :(得分:1)

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