当前位置: 首页 > 知识库问答 >
问题:

雪花在拼花地板上不是按柱分割的

朱硕
2023-03-14

关于雪花的新功能--推断模式表函数,我有一个问题。INFER模式函数在parquet文件上执行得很好,并返回正确的数据类型。但是,当parquet文件被分区并存储在S3中时,INFER模式的功能与pyspark Dataframes不同。

在DataFrames中,分区文件夹名称和值作为最后一列读取;在雪花推断模式中有没有一种方法可以达到同样的结果?

示例:

示例:{“AGMT_GID”:1714844883,“AGMT_Trans_GID”:640481290,“DT_Received”:“20 302”}

在这种情况下,snowflake infer模式只提供了三列;但是,在Pyspark dataframe中读取相同的文件会打印所有四列。

我想知道雪花中是否有一个变通方法来读取一个分区的拼花文件。

共有1个答案

公羊光明
2023-03-14

在处理分区的parquet文件时,用雪花处理这个问题。此问题不仅发生在infer_schema中。以下流不会将按列分区作为雪花中的列扣除:

  • 从拼花板复制到表中
  • 从拼花图合并到表
  • 从拼花地板中选择
  • infer_schema from parquet

Snowflake将parquet文件视为文件,忽略文件夹名称中的元信息。Apache Spark智能地扣除分区列。

到目前为止,Snowflake元数据只提供

  • metadata$filename-当前行所属的分段数据文件的名称。包括该阶段中数据文件的路径。
  • 元数据$file_row_number-每个记录的行号

我们可以这样做:

    select $1:normal_column_1, ..., METADATA$FILENAME  
        FROM
            '@stage_name/path/to/data/' (pattern => '.*.parquet')
    limit 5;
METADATA$FILENAME 
----------
path/to/data/year=2021/part-00020-6379b638-3f7e-461e-a77b-cfbcad6fc858.c000.snappy.parquet
sql prettyprint-override">    select 
        regexp_replace(METADATA$FILENAME, '.*\/year=(.*)\/.*', '\\1'
        ) as year
        $1:normal_column_1,  
    FROM
            '@stage_name/path/to/data/' (pattern => '.*.parquet')
    limit 5;
    null
  • 添加内容与按列内容分区相同的重复列
  • 这应该发生在写信给拼花之前。因此parquet文件将具有以下列内容。
df.withColumn("partition_column", col("col1")).write.partitionBy("partition_column").parquet(path)
  • 使用这种方法,如果我们这样做一次,在所有的parquet用法中(复制、合并、选择、推断),新列将开始出现。

方法3

    null
 类似资料:
  • 由于,我检查了一个spark作业的输出拼花文件,该作业总是会发出声音。我在Cloudera 5.13.1上使用了 我注意到拼花地板排的大小是不均匀的。第一排和最后一排的人很多。剩下的真的很小。。。 拼花地板工具的缩短输出,: 这是已知的臭虫吗?如何在Spark中设置拼花地板块大小(行组大小)? 编辑: Spark应用程序的作用是:它读取一个大的AVRO文件,然后通过两个分区键(使用

  • 我如何使用胶水/火花转换成拼花,这也是分区的日期和分裂在n个文件每天?。这些示例不包括分区、拆分或供应(多少节点和多大节点)。每天包含几百GBS。 因为源CSV不一定在正确的分区中(错误的日期),并且大小不一致,所以我希望用正确的分区和更一致的大小写到分区的parquet。

  • 我是Spark的初学者,试图理解Spark数据帧的机制。当从csv和parquet加载数据时,我比较了spark sql dataframe上sql查询的性能。我的理解是,一旦数据加载到spark数据框中,数据的来源(csv或parquet)应该无关紧要。然而,我看到了两者之间的显著性能差异。我使用以下命令加载数据,并对其编写查询。 请解释差异的原因。

  • 我很难找到这个问题的答案。假设我为拼花地板编写了一个数据框,并且我使用与相结合来获得一个分区良好的拼花地板文件。请参阅下面: 现在,稍后我想读取拼花文件,所以我这样做: 数据帧是否由分区?换句话说,如果拼花地板文件被分区,火花在将其读入火花数据帧时是否会维护该分区。还是随机分区? 同样,这个答案的“为什么”和“为什么不”也会有所帮助。

  • 我试图利用火花分区。我试图做这样的事情 这里的问题每个分区都会创建大量的镶木地板文件,如果我尝试从根目录读取,则会导致读取缓慢。 为了避免这种情况,我试过 但是,这将创建每个分区中镶木地板文件的数目。现在我的分区大小不同了。因此,理想情况下,我希望每个分区都有单独的合并。然而,这看起来并不容易。我需要访问所有分区合并到一定数量并存储在单独的位置。 我应该如何使用分区来避免写入后出现许多文件?

  • 我能够以拼花格式写入,并通过如下列进行分区: 但我无法用Glue的DynamicFrame做到这一点。 我试图通过作为的一部分,因为AWS文档说拼花胶不支持任何格式选项,但这不起作用。 这有可能吗?怎么可能?至于这样做的原因,我认为工作书签是必要的,因为这对我目前不起作用。