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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.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 s3 S3中的配置单元表位置不带斜杠_Amazon S3_Hive_Aws Glue - Fatal编程技术网

Amazon s3 S3中的配置单元表位置不带斜杠

Amazon s3 S3中的配置单元表位置不带斜杠,amazon-s3,hive,aws-glue,Amazon S3,Hive,Aws Glue,我已经将S3访问日志转储到了一个明显不友好的Hive(Glue Data Catalog)结构中的bucket中。基本上,它们有一个以斜杠结尾的前缀,然后每个文件名都以一个日期字符串开头,但它们并没有被分成下面的“子目录”(我知道S3不做目录,但很多事情都喜欢假装它做——例如Hive和S3 web控制台)。这些文件最终看起来如下所示: s3://logs-bucket/some-prefix/2020-01-01-00-18-09-0D4ABDAC9C0DA971 s3://logs-bucke

我已经将S3访问日志转储到了一个明显不友好的Hive(Glue Data Catalog)结构中的bucket中。基本上,它们有一个以斜杠结尾的前缀,然后每个文件名都以一个日期字符串开头,但它们并没有被分成下面的“子目录”(我知道S3不做目录,但很多事情都喜欢假装它做——例如Hive和S3 web控制台)。这些文件最终看起来如下所示:

s3://logs-bucket/some-prefix/2020-01-01-00-18-09-0D4ABDAC9C0DA971
s3://logs-bucket/some-prefix/2020-02-02-00-18-32-F4326DB4C0F61E87
s3://logs-bucket/some-prefix/2020-02-02-00-27-32-75841FC1705062CA
...
有数百万这样的人

我试图弄清楚如何定义一个配置单元表或分区方案,根据日期分隔这些文件。否则,我必须扫描整个前缀,即使我知道我要查找的数据是以给定日期开头的文件

我尝试在位置
“s3://logs bucket/some prefix/2020-02”定义一个名为“s3\u logs\u 2020-02”的表。我还尝试了一个以前缀为根的分区表,并且在“2020-02”分区中使用了相同的位置。在这两种情况下都找不到数据,因为配置单元(Glue?)似乎隐式地在位置字符串的末尾添加了一个“/”

所以问题是,有没有办法告诉配置单元不要隐式地将尾部斜杠添加到S3位置

编辑:
我研究过的另一种方法是使用“$path”伪列向查询中添加where子句。这可以减少实际返回的结果,但我不清楚它是否会减少实际扫描的S3路径。有人知道吗?

从技术上讲,s3没有文件夹。但HDFS已经做到了。配置单元分区是Hadoop兼容的fylesystem中的一个文件夹。出于兼容性原因,许多工具假装s3有文件夹,但实际上这些文件夹是前缀。还有许多针对前缀列表的优化。无法告诉配置单元使用某些前缀作为文件夹。您可以实现Lambda在S3事件上执行并将文件移动到每日文件夹,阅读以下回答:好吧-我怀疑是这样的,但只是想问问更广泛的社区,以防我遗漏了什么。我们将重新构造日志文件的布局。Thx:)