Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon web services 将AWS S3中的数据转换为另一个模式结构(也在S3中)_Amazon Web Services_Amazon S3_Amazon Emr - Fatal编程技术网

Amazon web services 将AWS S3中的数据转换为另一个模式结构(也在S3中)

Amazon web services 将AWS S3中的数据转换为另一个模式结构(也在S3中),amazon-web-services,amazon-s3,amazon-emr,Amazon Web Services,Amazon S3,Amazon Emr,这是一个相当初级的问题- 我将日志数据存储在S3文件中,采用压缩JSON格式。 这些文件位于反映分区的目录层次结构中,其方式如下:s3://bucket\u name/year=2018/month=201805/day=201805/some\u more\u partitions/file.json.gz 我最近将日志记录的模式更改为稍微不同的目录结构。我添加了更多的分区级别,这些字段当前位于JSON内部,我想将它们移动到文件夹层次结构中。另外,我稍微更改了内部JSON模式。它们位于不同的S

这是一个相当初级的问题-

我将日志数据存储在S3文件中,采用压缩JSON格式。 这些文件位于反映分区的目录层次结构中,其方式如下:
s3://bucket\u name/year=2018/month=201805/day=201805/some\u more\u partitions/file.json.gz

我最近将日志记录的模式更改为稍微不同的目录结构。我添加了更多的分区级别,这些字段当前位于JSON内部,我想将它们移动到文件夹层次结构中。另外,我稍微更改了内部JSON模式。它们位于不同的S3存储桶中

我希望将旧日志转换为新格式,因为我有新模式结构上的Athena映射

AWS EMR是这方面的工具吗?如果是这样,最简单的方法是什么?我想我需要一个类型为
step execution
的EMR集群,但它可能只创建一个输出文件,不是吗


谢谢

是的,亚马逊EMR是一个合适的工具

您可以使用Hive,它的ish语法与Athena相似:

  • 使用旧模式创建指向现有数据的外部表
  • 使用新模式创建一个外部表,指向要存储数据的位置
  • 插入新表从旧表中选择*
如果您打算使用AmazonAthena查询数据,那么可以使用AmazonEMR,这将提供更好的查询性能


请参阅:

是的,Amazon EMR是一个合适的工具

您可以使用Hive,它的ish语法与Athena相似:

  • 使用旧模式创建指向现有数据的外部表
  • 使用新模式创建一个外部表,指向要存储数据的位置
  • 插入新表从旧表中选择*
如果您打算使用AmazonAthena查询数据,那么可以使用AmazonEMR,这将提供更好的查询性能


请参阅:

是,EMR可用于此类转换

下面是将csv(stg文件夹又名源文件夹)格式的数据转换为orc文件格式的示例代码。如果暂存(也称为源)文件和目标文件之间存在重叠分区,则可能需要执行插入覆盖

DROP TABLE IF EXISTS db_stg.stg_table;

CREATE EXTERNAL TABLE `db_stg.stg_table`(
GEO_KEY string,
WK_BEG_DT string,
FIS_WK_NUM Double,
AMOUNT1 Double
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION
  's3://bucket.name/stg_folder_name/'
TBLPROPERTIES ('has_encrypted_data'='false');


drop  table  db_tgt.target_table;

CREATE EXTERNAL TABLE db_tgt.target_table(
GEO_KEY string,
FIS_WK_NUM Double,
AMOUNT1 Double
)
PARTITIONED BY(FIS_WK_NUM)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'

location 's3://bucket.name/tgt_folder_name/'

TBLPROPERTIES (
  'orc.compress'='SNAPPY');

set hive.exec.dynamic.partition.mode=nonstrict;


insert overwrite  table  db_tgt.target_table partition(FIS_WK_NUM)
  select
GEO_KEY  ,
WK_BEG_DT ,
FIS_WK_NUM  ,
AMOUNT1   
from  db_stg.stg_table;
同意John的观点,转换为柱状文件格式(如Parquet或ORC)以及压缩(如SNAPPY)将为您提供AWS Athena的最佳性能


请记住,使用雅典娜的关键是优化扫描读取的数据量。因此,如果数据是列格式的,并且您正在读取某些分区,那么AWS Athena成本将显著降低。您需要做的就是确保在选择所需分区的Athena查询中使用筛选条件。

是EMR可用于此类转换

下面是将csv(stg文件夹又名源文件夹)格式的数据转换为orc文件格式的示例代码。如果暂存(也称为源)文件和目标文件之间存在重叠分区,则可能需要执行插入覆盖

DROP TABLE IF EXISTS db_stg.stg_table;

CREATE EXTERNAL TABLE `db_stg.stg_table`(
GEO_KEY string,
WK_BEG_DT string,
FIS_WK_NUM Double,
AMOUNT1 Double
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LOCATION
  's3://bucket.name/stg_folder_name/'
TBLPROPERTIES ('has_encrypted_data'='false');


drop  table  db_tgt.target_table;

CREATE EXTERNAL TABLE db_tgt.target_table(
GEO_KEY string,
FIS_WK_NUM Double,
AMOUNT1 Double
)
PARTITIONED BY(FIS_WK_NUM)
ROW FORMAT SERDE 
  'org.apache.hadoop.hive.ql.io.orc.OrcSerde' 
STORED AS INPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcInputFormat' 
OUTPUTFORMAT 
  'org.apache.hadoop.hive.ql.io.orc.OrcOutputFormat'

location 's3://bucket.name/tgt_folder_name/'

TBLPROPERTIES (
  'orc.compress'='SNAPPY');

set hive.exec.dynamic.partition.mode=nonstrict;


insert overwrite  table  db_tgt.target_table partition(FIS_WK_NUM)
  select
GEO_KEY  ,
WK_BEG_DT ,
FIS_WK_NUM  ,
AMOUNT1   
from  db_stg.stg_table;
同意John的观点,转换为柱状文件格式(如Parquet或ORC)以及压缩(如SNAPPY)将为您提供AWS Athena的最佳性能


请记住,使用雅典娜的关键是优化扫描读取的数据量。因此,如果数据是列格式的,并且您正在读取某些分区,那么AWS Athena成本将显著降低。您所需要做的就是确保在Athena查询中使用筛选条件来选择所需的分区。

感谢您的回复,在搜索ansewr时,我看到了这一点,即这种方法很慢。。。你会说这仍然是最好的方法吗?这是一个一次性的工作,所以它是否慢并不重要,只要它能给你想要的结果。将数据存储在分区中(最好是拼花地板或Avro)将加快雅典娜的速度并降低雅典娜的成本。感谢您的回复,在搜索ansewr时,我看到了这样一种说法,即这种方法很慢。。。你会说这仍然是最好的方法吗?这是一个一次性的工作,所以它是否慢并不重要,只要它能给你想要的结果。将数据存储在分区中(最好是拼花地板或Avro)将加快Athena的速度,并降低Athena的成本。