我已经在Avro模式中创建了一个表。这里是创建脚本。
CREATE TABLE `old_db.MyTable`(
`fileld1` string COMMENT '',
`field2` string COMMENT '',
`field3` string COMMENT '')
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.avro.AvroSerDe'
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.avro.AvroContainerOutputFormat'
LOCATION
'/data/gaurav/work/hive/old_db/MyTable'
TBLPROPERTIES (
'COLUMN_STATS_ACCURATE'='false',
'avro.schema.url'='/data/gaurav/work/hive/old_db/SCHEMA/MyTable.avsc')
我正在将该表导出到暂存数据库staging_db中。 使用old_db; 将表myTable导出到'/ data / gaurav / staging / hive / staging_db / MyTable'
如果我转到路径/data/gaurav/staging/hive/staging_db/MyTable
它包含两个子目录
data/gaurav/staging/hive/staging_db/MyTable/data
,其中包含.avro
个文件
和data/gaurav/staging/hive/staging_db/MyTable/_metadata
。
此后,我将此表导入到另一个目标数据库target_db
use target_db;
import table MyTable from '/data/gaurav/staging/hive/staging_db/MyTable'
在导入后,将创建该表并填充数据。虽然导出和导入模式位置保持不变,并且在target_db中创建该表时,其模式仍指向旧位置,即/data/gaurav/work/hive/old_db/SCHEMA/MyTable.avsc
。
如果未导出和导入.avsc文件,新创建的MyTable将从何处获取架构?
答案 0 :(得分:0)
在这种情况下,应该允许用户在运行脚本时在命令提示符下选择位置目录。 这意味着,当脚本在开发服务器上运行时,然后在运行脚本时,应询问用户表的保存位置。舞台环境也一样。 使用“ $”命令允许用户在运行时输入位置。