hadoop - 创建具有 serde 格式和额外列的外部表 - HIVE
问题描述
我正在尝试将一个 txt 文件导入到外部表中,并在配置单元中添加一个额外的列,如下所示:
CREATE EXTERNAL TABLE IF NOT EXISTS bs.tbl_bt(
tp_registro string,
seq string,
num_a string,
dt_chamada string,
hr_chamada string,
num_b string,
pt_interconect string,
dur_rel_chamada string,
dur_tar_chamada string,
tp_servico string,
vl_liq_chamada string,
vl_brt_chamada string,
reserva string,
'${hiveconf:tez.task.operadora}' as operadora string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
WITH SERDEPROPERTIES (input.regex = (.{1})(.{10})(.{21})(.{8})(.{6})(.{20})(.{10})(.{7})(.{7})(.{2})(.{11})(.{11})(.{29}).*)
STORED AS TEXTFILE
LOCATION '/gr/Fi/B/${hiveconf:tez.task.operadora}';
我究竟做错了什么?
解决方案
Hive DDL 定义列时不包括 AS
CREATE [TEMPORARY] [EXTERNAL] TABLE [IF NOT EXISTS] [db_name.]table_name -- (Note: TEMPORARY available in Hive 0.14.0 and later)
[(col_name data_type [column_constraint_specification] [COMMENT col_comment], ... [constraint_specification])]
所以,试试吧
'${hiveconf:tez.task.operadora}' STRING
或者,如果您确实需要该列始终为operadora,则删除 hiveconf 变量
也许您正在混淆一个 CTAS 语句,您可以在创建表时选择一个列作为另一个名称
推荐阅读
- javascript - 区分2个数组,即添加和删除哪些项目
- react-virtualized - React-Virtualized:如何插入/删除一行而不重新渲染它下面的行?
- mysql - ER图,实体标识为一个属性或另一个属性
- c# - ObservableCollection 更新 GridView 时闪烁的单元格
- javascript - 有人可以修复我的代码以复制按钮吗?(Visual Studio 代码)
- angular - Angular 将字符串发布到 MVC 控制器
- keras - 实现一个 Keras 层,该层为区域提议网络(功能 API)采用不同形状的输入
- rust - C++ 的 shared_from_this 的 Rust 等价物是什么?
- php - 从字符串引用模型
- jsf - 将下拉列表中的值插入数据库表