创建表

使用分区创建托管表并存储为序列文件。假定文件中的数据格式由 Ctrl-A (^A) 字段分隔,并由换行符分隔行。下表是在 Hive 配置文件 hive-site.xml 中的键 hive.metastore.warehouse.dir 的值中指定的配置单仓库目录中创建的。

CREATE TABLE view
(time INT, 
id BIGINT,
url STRING, 
referrer_url STRING,
add STRING COMMENT 'IP of the User')
COMMENT 'This is view table'
PARTITIONED BY(date STRING, region STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
STORED AS SEQUENCEFILE;

使用分区创建外部表并存储为序列文件。假定文件中的数据格式由 ctrl-A 以字段分隔,并由换行符分隔行。下表是在指定的位置创建的,当我们已经拥有数据时它会很方便。使用外部表的一个优点是我们可以删除表而不删除数据。例如,如果我们创建一个表并意识到模式是错误的,我们可以安全地删除表并使用新模式重新创建而不用担心数据。其他优点是如果我们在相同的文件上使用其他工具如 pig,我们删除表后即可继续使用它们。

CREATE EXTERNAL TABLE view
(time INT, 
id BIGINT,
url STRING, 
referrer_url STRING,
add STRING COMMENT 'IP of the User')
COMMENT 'This is view table'
PARTITIONED BY(date STRING, region STRING)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
STORED AS SEQUENCEFILE
LOCATION '<hdfs_location>';

使用 select 查询创建表并从查询中填充结果,这些语句称为 CTAS(Create Table As Select)

CTAS 中有两个部分,SELECT 部分​​可以是 HiveQL 支持的任何 SELECT 语句。CTAS 的 CREATE 部分从 SELECT 部分​​获取结果模式,并使用其他表属性(如 SerDe 和存储格式)创建目标表。

CTAS 有以下限制:

  • 目标表不能是分区表。
  • 目标表不能是外部表。
  • 目标表不能是列表存储表。
CREATE TABLE new_key_value_store
ROW FORMAT SERDE "org.apache.hadoop.hive.serde2.columnar.ColumnarSerDe"
STORED AS RCFile
AS
SELECT * FROM page_view
SORT BY url, add;

创建表格如:

CREATE TABLELIKE 形式允许你准确地复制现有的表定义(不复制其数据)。与 CTAS 相反,下面的语句创建了一个新表,其定义与表名以外的所有细节中的现有表完全匹配。新表不包含任何行。

CREATE TABLE empty_page_views
LIKE page_views;