繁体   English   中英

Oracle 分区表到 Datalake 使用 python

[英]Oracle Partitioned table to Datalake using python

您好,我正在尝试将 Oracle 分区表转换为 Datalake 镶木地板文件。

使用这个脚本

# Convert it to Spark SQL table and save it as parquet format

df.write \
    .format("parquet") \
    .option("path","/archive/" + schema_name + "/" + table_name + ".parquet") \
    .mode("append") \
    .saveAsTable(table_name)

此代码获取表的所有数据而不是分区。

spark = SparkSession.builder \
        .appName("Load " + schema_name + " " + table_name + " from Oracle into Parquet and creating Table") \
        .getOrCreate()

这是从 Oracle 创建表

我怎样才能得到这唯一的镶木地板:)

您说过,当您从表中获取 select 时,您正在从表中获取数据并且您想要从特定分区获取数据。 您是否尝试使用语法 PARTION(partition_name) 放置分区名称。

你有多少个分区,如果不是太多,那么你可以尝试为每个分区创建一个视图,然后从视图中选择数据。

在 oracle 中创建名为 Checkes 的表,在我可以从 Spark 读取分区名称后将分区名称添加到表中。


query = '(select partition_name from Schema.checkes c) checkes'
df = spark.read \
    .format("jdbc") \
    .option("url","jdbc:oracle:thin:@" + db_host + ":" + db_port + "/" + db_service) \
    .option("dbtable",query) \
    .option("user",db_user) \
    .option("password",db_pass) \
    .option("driver","oracle.jdbc.OracleDriver") \
    .option("encoding","UTF-8") \
    .option("fetchSize", 10000) \
    .option("numPartitions",40) \
    .load()

print("part count: " + str(df.count()))
if df.count() > 0:partition_name = df.select("partition_name").collect()[0]["partition_name"]
df1 = spark.read \
    .format("jdbc") \
    .option("url","jdbc:oracle:thin:@" + db_host + ":" + db_port + "/" + db_service) \
    .option("dbtable",query1) \
    .option("user",db_user) \
    .option("password",db_pass) \
    .option("driver","oracle.jdbc.OracleDriver") \
    .option("encoding","UTF-8") \
    .option("fetchSize", 10000) \
    .option("numPartitions",40) \
    .load()
    ```

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM