创建表
使用分区创建托管表并存储为序列文件。假定文件中的数据格式由 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 TABLE 的 LIKE 形式允许你准确地复制现有的表定义(不复制其数据)。与 CTAS 相反,下面的语句创建了一个新表,其定义与表名以外的所有细节中的现有表完全匹配。新表不包含任何行。
CREATE TABLE empty_page_views
LIKE page_views;