Hive DDL(数据定义语言)
Confluence Administrator创建, Janaki Lahorani修改于 2018年9月19日
原文链接
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
翻译:Google Google翻译,金山软件 金山词霸
校对:南大通用 范振勇 (2018.9.26)
一、概述
这里是HiveQL DDL语句的文档,其中包括:
CREATE 数据库/SCHEMA,表,视图,函数,索引
DROP 数据库/SCHEMA,表,视图,索引
TRUNCATE表
ALTER 数据库/SCHEMA,表,视图
MSCK REPAIR TABLE(或ALTER TABLE RECOVER PARTITIONS)
SHOW 数据库/SCHEMA,表,表属性,视图,分区,函数,索引 [ES],列,创建表语句
DESCRIBE 数据库/SCHEMA,表 视图
PARTITION语句通常是TABLE语句的选项,除了SHOW分区。
二、关键词,非保留关键字和保留关键字
表格 1 关键词,非保留关键字和保留关键字
|
所有关键词 |
|
Hive版本 |
非保留关键字 |
保留关键字 |
1.2.0 |
ADD, ADMIN, AFTER, ANALYZE, ARCHIVE, ASC, BEFORE, BUCKET, BUCKETS, CASCADE, CHANGE, CLUSTER, CLUSTERED, CLUSTERSTATUS, COLLECTION, COLUMNS, COMMENT, COMPACT, COMPACTIONS, COMPUTE, CONCATENATE, CONTINUE, DATA, DATABASES, DATETIME, DAY, DBPROPERTIES, DEFERRED, DEFINED, DELIMITED, DEPENDENCY, DESC, DIRECTORIES, DIRECTORY, DISABLE, DISTRIBUTE, ELEM_TYPE, ENABLE, ESCAPED, EXCLUSIVE, EXPLAIN, EXPORT, FIELDS, FILE, FILEFORMAT, FIRST, FORMAT, FORMATTED, FUNCTIONS, HOLD_DDLTIME, HOUR, IDXPROPERTIES, IGNORE, INDEX, INDEXES, INPATH, INPUTDRIVER, INPUTFORMAT, ITEMS, JAR, KEYS, KEY_TYPE, LIMIT, LINES, LOAD, LOCATION, LOCK, LOCKS, LOGICAL, LONG, MAPJOIN, MATERIALIZED, METADATA, MINUS, MINUTE, MONTH, MSCK, NOSCAN, NO_DROP, OFFLINE, OPTION, OUTPUTDRIVER, OUTPUTFORMAT, OVERWRITE, OWNER, PARTITIONED, PARTITIONS, PLUS, PRETTY, PRINCIPALS, PROTECTION, PURGE, READ, READONLY, REBUILD, RECORDREADER, RECORDWRITER, REGEXP, RELOAD, RENAME, REPAIR, REPLACE, REPLICATION, RESTRICT, REWRITE, RLIKE, ROLE, ROLES, SCHEMA, SCHEMAS, SECOND, SEMI, SERDE, SERDEPROPERTIES, SERVER, SETS, SHARED, SHOW, SHOW_DATABASE, SKEWED, SORT, SORTED, SSL, STATISTICS, STORED, STREAMTABLE, STRING, STRUCT, TABLES, TBLPROPERTIES, TEMPORARY, TERMINATED, TINYINT, TOUCH, TRANSACTIONS, UNARCHIVE, UNDO, UNIONTYPE, UNLOCK, UNSET, UNSIGNED, URI, USE, UTC, UTCTIMESTAMP, VALUE_TYPE, VIEW, WHILE, YEAR |
ALL, ALTER, AND, ARRAY, AS, AUTHORIZATION, BETWEEN, BIGINT, BINARY, BOOLEAN, BOTH, BY, CASE, CAST, CHAR, COLUMN, CONF, CREATE, CROSS, CUBE, CURRENT, CURRENT_DATE, CURRENT_TIMESTAMP, CURSOR, DATABASE, DATE, DECIMAL, DELETE, DESCRIBE, DISTINCT, DOUBLE, DROP, ELSE, END, EXCHANGE, EXISTS, EXTENDED, EXTERNAL, FALSE, FETCH, FLOAT, FOLLOWING, FOR, FROM, FULL, FUNCTION, GRANT, GROUP, GROUPING, HAVING, IF, IMPORT, IN, INNER, INSERT, INT, INTERSECT, INTERVAL, INTO, IS, JOIN, LATERAL, LEFT, LESS, LIKE, LOCAL, MACRO, MAP, MORE, NONE, NOT, NULL, OF, ON, OR, ORDER, OUT, OUTER, OVER, PARTIALSCAN, PARTITION, PERCENT, PRECEDING, PRESERVE, PROCEDURE, RANGE, READS, REDUCE, REVOKE, RIGHT, ROLLUP, ROW, ROWS, SELECT, SET, SMALLINT, TABLE, TABLESAMPLE, THEN, TIMESTAMP, TO, TRANSFORM, TRIGGER, TRUE, TRUNCATE, UNBOUNDED, UNION, UNIQUEJOIN, UPDATE, USER, USING, UTC_TMESTAMP, VALUES, VARCHAR, WHEN, WHERE, WINDOW, WITH
|
2.0.0 |
删除: REGEXP, RLIKE 补充: AUTOCOMMIT, ISOLATION, LEVEL, OFFSET, SNAPSHOT, 事务,工作,写 |
添加: COMMIT, ONLY, REGEXP, RLIKE, ROLLBACK, START
|
2.1.0 |
添加: ABORT, KEY, LAST, NORELY, NOVALIDATE, NULLS, RELY, VALIDATE |
添加: CACHE, CONSTRAINT, FOREIGN, PRIMARY, REFERENCES |
2.2.0 |
添加: DETAIL, DOW, EXPRESSION, OPERATOR, QUARTER, SUMMARY, VECTORIZATION, WEEK, YEARS, MONTHS, WEEKS, DAYS, HOURS, MINUTES, SECONDS |
添加: DAYOFWEEK, EXTRACT, FLOOR, INTEGER, PRECISION, VIEWS
|
3.0.0 |
添加: TIMESTAMPTZ, ZONE |
添加: TIME, NUMERIC, SYNC |
版本信息
REGEXP和RLIKE在Hive2.0.0之前是非保留关键字,从Hive2.0.0开始是保留关键字。
按照“支持带引号的列名”,可以将保留关键字使用引号包围以便允许将其作为标识符。为了减少在语法歧义,大部分的关键字是保留关键字(1.2.0版本及更高版本)。
如果用户仍想使用这些保留的关键字作为标识符,有如下两种方式:
1)、使用带引号的标识符;
2)、设置hive.support.sql11.reserved.keywords =false。(版本2.1.0及更早版本)
三、创建/删除/修改/使用数据库
3.1、 创建数据库
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)];
SCHEMA和DATABASE的用途是可以互换的,他们的含义相同。
CREATE DATABASE在Hive0.6加入的(HIVE-675)。
WITH DBPROPERTIES子句是在Hive0.7加入的(HIVE-1836)。
3.2、 删除数据库
DROP (DATABASE|SCHEMA) [IF EXISTS] database_name [RESTRICT|CASCADE];
SCHEMA和DATABASE的用途是可以互换的,他们的含义相同。
在Hive0.6加入DROP DATABASE (HIVE-675)。
默认行为是RESTRICT,其中如果数据库不是空的DROP DATABASE将失败。要删除包含表的数据库,需要使用DROP DATABASE ... CASCADE。在Hive0.8开始支持RESTRICT和CASCADE。
3.3、 修改数据库
ALTER (DATABASE|SCHEMA) database_name SET DBPROPERTIES (property_name=property_value, ...); ALTER (DATABASE|SCHEMA) database_name SET OWNER [USER|ROLE] user_or_role; ALTER (DATABASE|SCHEMA) database_name SET LOCATION hdfs_path;
SCHEMA和DATABASE的用途是可以互换的,他们的含义相同。ALTER SCHEMA在Hive0.14加入(HIVE-6601)。
在ALTER DATABASE ... SET LOCATION语句并不将数据库的当前目录中的内容移到新指定的位置。它不改变指定的数据库下的所有表/分区相关联的位置。它只是修改了即将添加到这个数据库中的新表的默认父目录。此行为是类似于修改表目录而不移动现有的分区到另外的位置。
数据库中其他元数据是不可以修改的。
3.4、 使用数据库
USE database_name; USE DEFAULT;
USE设置接下来所有HiveQL语句的当前数据库。要还原到默认的数据库,使用关键字“ default”,而不是数据库名称。
取得当前正在使用的数据库:SELECT current_database()(从Hive0.13.0)。
USE database_name在Hive0.6中加入(HIVE-675)。
四、创建/删除/截断表
4.1、 创建表
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name [(col_name data_type [COMMENT col_comment], ... [constraint_specification])] [COMMENT table_comment] [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] [CLUSTERED BY (col_name, col_name, ...) [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] [SKEWED BY (col_name, col_name, ...)] ON ((col_value, col_value, ...), (col_value, col_value, ...), ...) [STORED AS DIRECTORIES] [ [ROW FORMAT row_format] [STORED AS file_format] | STORED BY 'storage.handler.class.name' [WITH SERDEPROPERTIES (...)]] [LOCATION hdfs_path] [TBLPROPERTIES (property_name=property_value, ...)] [AS select_statement]; CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name LIKE existing_table_or_view_name [LOCATION hdfs_path]; data_type : primitive_type | array_type | map_type | struct_type | union_type primitive_type : TINYINT | SMALLINT | INT | BIGINT | BOOLEAN | FLOAT | DOUBLE | DOUBLE PRECISION | STRING | BINARY | TIMESTAMP | DECIMAL | DECIMAL(precision, scale) | DATE | VARCHAR | CHAR array_type : ARRAY < data_type > map_type : MAP < primitive_type, data_type > struct_type : STRUCT < col_name : data_type [COMMENT col_comment], ...> union_type : UNIONTYPE < data_type, data_type, ... > row_format : DELIMITED [FIELDS TERMINATED BY char [ESCAPED BY char]] [COLLECTION ITEMS TERMINATED BY char] [MAP KYS TERMINATED BY char] [LINES TERMINATED BY char] [NULL DEFINED AS char] | SERDE serde_name [WITH SERDEPROPERTIES (property_name=property_value, property_name=property_value, ...)] file_format: : SEQUENCEFILE | TEXTFILE -- (Default, depending on hive.default.fileformat configuration) | RCFILE | ORC | PARQUET | AVRO | JSONFILE -- (Note: Available in Hive 4.0.0 and later) | INPUTFORMAT input_format_classname OUTPUTFORMAT output_format_classname constraint_specification: : [, PRIMARY KEY (col_name, ...) DISABLE NOVALIDATE ] [, CONSTRAINT constraint_name FOREIGN KEY (col_name, ...) REFERENCES table_name(col_name, ...) DISABLE NOVALIDATE
CREATE TABLE根据给定名称创建表。如果已经存在一个具有相同名称的表或视图,则会引发错误。您可以使用IF NOT EXISTS跳过错误。
- 表名和列名不区分大小写,但SERDE和属性名称是区分大小写的。
- 在Hive0.12和更早的版本中,表名和列名只允许由字母数字和下划线组成。
- 在Hive0.13之后,列名可以包含任何的Unicode字符(见HIVE-6013),然而,点和冒号( :)上查询时会产生错误,所以它们在Hive1.2.0是不允许的(见HIVE-10120)。用反引号内指定的任何列名都按字面处理。在反引号字符串中,用双反引号(``)来表示一个反引号字符。反引号也使得表和列标识符可使用保留关键字。
- 要恢复到0.13.0之前的模式,即列名为字符和下划线字符,需要设置配置属性hive.support.quoted.identifiers为none。在这种配置中,反引号名成被解释为正则表达式。有关详细信息,请参阅在列名中支持带引号的标识符。
- 表和列注释字符串(单引号)。
- 创建时没有External 子句的表被称为托管表,因为Hive管理其数据。要判断一个表托管表还是外部表,执行 DESCRIBE EXTENDED表名即可输出表的类型。
- TBLPROPERTIES子句允许你用键/值对定义自己的元数据。一些预定义的表属性也是如此,如last_modified_user和last_modified_time就由Hive自动添加和管理。其他预定义的表属性包括:
- TBLPROPERTIES ("comment"="table_comment")
- TBLPROPERTIES ("hbase.table.name"="table_name") – 见集成HBASE.
- TBLPROPERTIES ("immutable"="true") 或("immutable"="false")– 见通过查询查插入数据到Hive表.
- TBLPROPERTIES ("orc.compress"="ZLIB") 或("orc.compress"="SNAPPY") 或 ("orc.compress"="NONE") 和其他ORC属性– 见ORC文件.
- TBLPROPERTIES ("transactional"="true")或 ("transactional"="false")– 见Hive事务.
- TBLPROPERTIES ("NO_AUTO_COMPACTION"="true") 或 ("NO_AUTO_COMPACTION"="false"), 缺省是 "false" – 见Hive事务.
- TBLPROPERTIES ("compactor.mapreduce.map.memory.mb"="mapper_memory") – 见Hive事务.
- TBLPROPERTIES ("compactorthreshold.hive.compactor.delta.num.threshold"="threshold_num") –见Hive事务.
- TBLPROPERTIES ("compactorthreshold.hive.compactor.delta.pct.threshold"="threshold_pct") – 见Hive事务.
- TBLPROPERTIES ("auto.purge"="true") 或 ("auto.purge"="false") – 见删除表、删除分区、截断表和覆盖式插入数据.
- TBLPROPERTIES ("EXTERNAL"="TRUE")–修改托管表为外部表,反之亦然为“FALSE”.
- 在Hive2.4.0中(HIVE-16324)属性“EXTERNAL”的值被解析为布尔型(不区分大小写的true或false),而不是比较时区分大小写字符串。
- 要指定表的数据库,或者在CREATE TABLE语句之前调用USE数据库名称,或者在CREATE TABLE语句之内指明数据库名称(如database_name.table.name)。
关键字“ default”可用于默认的数据库。
请参阅下面的ALTER TABLE有关表注释,表属性,SERDE属性的详细信息。
请参见Hive类型系统和Hive数据类型中有关原生数据类型和复杂数据类型的详细信息。
4.1.1、 托管表和外部表
缺省情况下,Hive创建托管表,其中的文件,元数据和统计信息由Hive进程内部管理。一个托管表存储在hive.metastore.warehouse.dir.path属性指定的目录下,默认情况下,文件夹路径类似/user/hive/warehouse/databasename.db/tablename/。默认位置可以在创建表的过程中通过重写location属性修改。如果一个托管表或分区被删除,与该表或分区相关联的数据和元数据都被删除。如果未指定PURGE选项,则数据被移动到垃圾文件夹,再保留事先定义的一段时间。
当Hive负责托管表的生命周期或生成临时表时,就使用托管表。
外部表描述了外部文件的元数据/Schema。外部表文件可以由Hive之外的进程访问和处理。外部表可以访问存储在外的数据源,例如Azure存储卷(ASV)或远程HDFS位置的数据。当外部表的结构或分区被改变时,可用MSCK REPAIR TABLE TABLE_NAME语句刷新元数据信息。
当外部表的文件已经存在或位于远程位置时,即使删除了该表,文件也会保留。
托管表或外部表可以使用DESCRIBE FORMATTED TABLE_NAME命令识别,该命令将根据表类型显示MANAGED_TABLE或EXTERNAL_TABLE。
统计数据可以用于内部表、外部表和分区的查询优化。
4.1.2、 存储格式
Hive支持内置和定制开发的文件格式。见CompressedStorage 关于压缩表存储的详细说明。
下面是一些内置Hive格式:
存储格式 |
描述 |
STORED AS TEXTFILE |
保存为纯文本文件。TEXTFILE是默认的文件格式中,除非配置参数hive.default.fileformat有其他的设置。 使用DELIMITED子句来分隔文件;允许使用转义为分隔符的'ESCAPED BY子句(如ESCAPED BY“”),如果你的数据中包含分隔符,就需要用转义符进行转义。 可自定义NULL格式,由 “NULL DEFINED AS”子句指定(默认为“N”)。 |
STORED AS SEQUENCEFILE |
存储为压缩的序列文件 |
STORED AS ORC |
存储为ORC文件格式。支持ACID事务和基于成本的优化器(CBO)。采用列存格式存储数据。 |
STORED AS PARQUET |
在Hive0.13.0和更高版本中,STORED AS PARQUET 保存为PARQUET列存格式。 在Hive0.10,0.11,0.12中使用ROW FORMAT SERDE ...STORE AS INPUTFORMAT ... OUTPUTFORMAT语法... 。 |
STORED AS AVRO |
存储为Avro的格式 |
STORED AS RCFILE |
存储RCFILE格式 |
STORED AS JSONFILE |
存储为JSON文件格式(Hive4.0.0以后) |
STORED BY |
由非本地表的格式存储。要创建或链接到一个非本地表,例如通过支持一个表的HBase或Druid或Accumulo 。 见StorageHandlers 中有关此选项的更多信息。 |
INPUTFORMAT and OUTPUTFORMAT |
在file_format子句中,用一个字符串指定相应的InputFormat和OutputFormat类名。例如, 'org.apache.hadoop.hive.contrib.fileformat.base64. Base64TextInputFormat'。 对于LZO压缩,要使用的值是 'INPUTFORMAT “com.hadoop.mapred. DeprecatedLzoTextInputFormat” OUTPUTFORMAT “ org.apache.hadoop.hive.ql.io . HiveIgnoreKeyTextOutputFormat”' (见LZO压缩)。 |
4.1.3、 行格式与SERDE
您可以在创建表时使用自定义SERDE或内置的SERDE。如果未指定ROW FORMAT或用ROW FORMAT DELIMITED指定,则采用内置SERDE。
使用SERDE子句创建自定义SERDE的表。有关SerDes的更多信息,请参见:
Hive SerDe
SerDe
HCatalog存储格式
必须为使用本机Serde的表指定列表,有关允许的列类型,请参阅“用户指南”中的“类型”部分。
可以为使用自定义SerDe的表指定列表,但Hive将查询Serde以确定该表的实际列表。
有关SerDes的一般信息,请参阅开发人员指南中的HiveSerDe。有关输入和输出处理的详细信息,请参见Serde。
要修改表的SERDE或SERDEPROPERTIES,参考下面ALTER TABLE语句中添加SERDE属性的描述。
行格式 |
描述 |
正则表达式 ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( “input.regex”= “<正则表达式>” ) STORED AS TEXTFILE; |
保存为纯文本文件,通过正则表达式转换。 下面的示例定义了Apache缺省博客格式的表。 CREATE TABLE apachelog ( host STRING, identity STRING, user STRING, 、 time STRING, request STRING, status STRING, size STRING, referer STRING, agent STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe' WITH SERDEPROPERTIES ( "input.regex" = "([^]*) ([^]*) ([^]*) (-|\[^\]*\]) ([^ "]*|"[^"]*") (-|[0-9]*) (-|[0-9]*)(?: ([^ "]*|".*") ([^ "]*|".*"))?" ) STORED AS TEXTFILE; 更多RegexSerDe的信息参见HIVE-662和HIVE-1719。 |
JSON ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS TEXTFILE |
存储为JSON格式的纯文本文件。 提供JSON支持的JsonSerDe在Hive0.12及更高版本中支持。 在一些发布版中,需要添加Hivehcatalog-core.jar的引用。 ADD JAR /usr/lib/hive-hcatalog/lib/hive-hcatalog-core.jar; CREATE TABLE my_table(a string, b bigint, ...) ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe' STORED AS TEXTFILE; 该JsonSerDe是被从HCatalog移动到Hive的,在它成为Hive contrib项目之前。它由HIVE-4895添加Hive发布版。在0.12.0版本之前,可以使用亚马逊发布的SERDE, s3://elasticmapreduce/samples/hive-ads/libs/jsonserde.jar。 从Hive3.0.0开始,JsonSerDe被添加到Hive SERDE中“org.apache.hadoop.hive.serde2.JsonSerDe”(HIVE-19211)。 CREATE TABLE my_table(a string, b bigint, ...) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.JsonSerDe' STORED AS TEXTFILE; 或者从Hive4.0.0开始支持STORED AS JSONFILE(HIVE-19899),这样你就可以如下创建表: CREATE TABLE my_table(a string, b bigint, ...) STORED AS JSONFILE; |
CSV/TSV
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' STORED AS TEXTFILE |
存储为CSV / TSV格式的纯文本文件。 该CSVSerde是在Hive0.14和以后版本是可用的。 下面的示例创建一个TSV(制表符分隔)文件。 CREATE TABLE my_table(a string, b string, ...) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' WITH SERDEPROPERTIES ( "separatorChar" = " ", "quoteChar" = "'", "escapeChar" = "\" ) STORED AS TEXTFILE; 对于SERDE默认属性是逗号分隔(CSV)文件 DEFAULT_ESCAPE_CHARACTER DEFAULT_QUOTE_CHARACTER " DEFAULT_SEPARATOR , 这SERDE适用于大多数CSV数据,但不处理嵌入换行符。要使用SERDE,指定完整类名org.apache.hadoop.hive.serde2.OpenCSVSerde。 文档是基于原始规范文件 https://github.com/ogrodnek/csv-serde。 限制: 此Serde将所有列视为String类型。即使使用该SerDe创建具有非字符串列类型的表,DESCRIBE TABLE的输出也会显示字符串列类型。类型信息将从Serde检索。 要将列转换为表中所需的类型,可以在表上创建一个视图来执行CAST转换为所需的类型。 CSV SerDe基于https:/github.com/ogrodnek/csv-serde,并添加到包含hive-7777中的Hive发布中。CSVSerde已经在Hive 0.14及更高版本上构建和测试,并且使用了OpenCSV2.3,它与Hive捆绑在一起发布。 |
有关SerDes的一般信息,请参阅开发指南中的Hive SerDe。有关输入和输出处理的详细信息,请参见Serde。
4.1.4、 分区表
分区表可以使用PARTITIONED BY子句来创建。一个表可以有一个或多个分区列,分区列的每个不同值组合被创建一个单独的数据目录。此外,可以使用CLUSTERED BY列对表或分区进行存储,并且可以通过SORT BY列在该存储桶中对数据进行排序。这可以提高某些类型查询的性能。
如果在创建分区表时,您得到了这样的错误:“Failure:Error in SemanticAnalysis:列在分区列中重复出现”,这意味着您试图将已分区的列包含在表本身的数据中。您可能确实已经定义了列。但是,您创建的分区时产生了一个伪列,您可以对其进行查询,因此您必须将表的已有列重命名为其他内容(用户不应该对其进行查询!)。
例如,假设您的原始未分区表有三列:ID,date和name。
例:
id int, date date, name varchar
现在你想根据date分区。您的Hive定义可以使用“dtDontQuery”作为列名,这样“date”可用于分区(和查询)。
例:
create table table_name ( id int, dtDontQuery string, name string ) partitioned by (date string)
现在,您的用户仍然在查询“ where date = '...'”但第二列dtDontQuery将保持原来的值。
下面是一个例子语句来创建分区表:
例:
CREATE TABLE page_view(viewTime INT, userid BIGINT, page_url STRING, referrer_url STRING, ip STRING COMMENT 'IP Address of the User') COMMENT 'This is the page view table' PARTITIONED BY(dt STRING, country STRING) STORED AS SEQUENCEFILE;
上面的语句创建了具有viewTime、userid、page_url、referrer_url和ip列(包括注释)的page_view表。还对表进行分区,并将数据存储在序列文件中。文件中的数据格式被假定为由ctrl-A分隔的字段和由换行符分隔的行。
例:
CREATE TABLE page_view(viewTime INT, userid BIGINT, page_url STRING, referrer_url STRING, ip STRING COMMENT 'IP Address of the User') COMMENT 'This is the page view table' PARTITIONED BY(dt STRING, country STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '