使用分区的雪花到 Hive 数据移动

Posted

技术标签:

【中文标题】使用分区的雪花到 Hive 数据移动【英文标题】:Snowflake to Hive data movement with partition 【发布时间】:2021-02-07 19:00:46 【问题描述】:

我们需要将数据从 Snowflake 移动到 Hive。我能够将数据从雪花卸载到 aws S3,并在 Hive 上进行 msck 修复。 但是所有记录在 Hive 中都是空的。可能是什么原因 ?这里有什么问题吗。 为了检查 parquet 是否正确创建,我使用 Spark 读取 Parquet 文件。我能够读取镶木地板文件。

##雪花 创建或替换阶段 dev_zone.DAILY_LOG url='s3://myc-mlb-alpha-us-east-1-drg-322t232/hive/rs_hive_008_test1' storage_integration = DEV_HIVE_INTEGRATION file_format = (type = 'parquet') ENCRYPTION = (TYPE = 'AWS_SSE_S3');

copy into @dev_zone.DAILY_LOG from (select * from dev_zone.DAILY_LOG limit 100) partition by  ('as_on_date=' ||as_on_date);

##Hive 
CREATE EXTERNAL TABLE dev_zone.DAILY_LOG(
dim_id decimal(38,0),
card_type string,
type string,
cntry string,
PARTITIONED BY (
  as_on_date date)
ROW FORMAT SERDE
  'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
STORED AS INPUTFORMAT
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
LOCATION
  's3://myc-mlb-alpha-us-east-1-drg-322t232/hive/rs_hive_008_test1'

【问题讨论】:

【参考方案1】:

我错过的是添加 header = true

copy into @dev_zone.DAILY_LOG from (select * from dev_zone.DAILY_LOG limit 100) partition by  ('as_on_date=' ||as_on_date) header = true;

【讨论】:

仅出于我自己的兴趣,您将数据从 Snowflake 移出并移入 Hive 的用例是什么? @NickW ,企业也希望将数据保留在 Hive 中。经过三个月的业务,他们想从 Snowflake 托管表中删除数据。一旦我们转移到 hive,这些数据可以作为 Snowflake 外部表访问(对于关键业务用户),对于其他人,他们可以通过 Hive 访问 - (Hive 在 EMR 上运行)因此除了读取 s3 存储桶之外,在 hive 上进行处理没有额外成本。希望我能回答你的问题。

以上是关于使用分区的雪花到 Hive 数据移动的主要内容,如果未能解决你的问题,请参考以下文章

雪花分区与手动集群

雪花 - Azure 文件上传 - 如果文件大小超过 40MB,我如何对文件进行分区

将 Hive 查询转换为雪花

[hive]维度模型分类:星型模型,雪花模型,星座模型|范式

通过自定义分区器对雪花中的大表进行分区

如何使用主键和分区列创建雪花表?示例 DDL?