【问题标题】:How does import table command in Hive fetches the schema?Hive 中的 import table 命令如何获取架构?
【发布时间】:2019-07-16 10:45:17
【问题描述】:

我在 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。 使用旧数据库; 将表 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 从哪里获取架构?

【问题讨论】:

    标签: apache-spark hadoop hive schema avro


    【解决方案1】:

    在这种情况下,您应该允许用户在运行脚本时在命令提示符下选择位置目录。 这意味着当脚本在开发服务器上运行时,然后在运行脚本时,它应该询问用户应该保存表的位置。舞台环境也是如此。 使用“$”命令允许用户在运行时输入位置。

    【讨论】:

    • 注意到我的问题是如果.avsc 文件没有被导出,当新创建的表只读取.avro 和元数据时,它如何能够读取模式?它是从元数据中读取的吗?跨度>
    猜你喜欢
    • 1970-01-01
    • 2011-10-25
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-13
    • 2021-06-07
    相关资源
    最近更新 更多