apache-spark - Hive中的import table命令如何获取架构?

标签 apache-spark hadoop hive schema avro

我已经在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将从何处获取架构?

最佳答案

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

关于apache-spark - Hive中的import table命令如何获取架构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54825394/

相关文章:

apache-spark - Spark中没有数据复制时如何实现容错?

scala - Spark 示例无法编译

hadoop - 云计算中 Hadoop 的数据局部性

java - Hadoop WordCount 错误

hadoop - 为什么 orc 文件比 Hive 中的 parquet 文件占用更多空间?

apache-spark - 什么是 DAGScheduler.messageProcessingTime?

scala - toDF 的值不是成员 org.apache.spark.rdd.RDD

apache-spark - pyspark 的 toDF() 与 createDataFrame() 的奇怪行为

hadoop - 编辑映射 Hive/Hbase

hadoop - hive 中的不同列