Oracle 使用 python 将 table 分区到 Datalake
Oracle Partitioned table to Datalake using python
您好,我正在尝试将 Oracle 分区 table 到 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)
此代码获取 table 而非分区的所有数据。
spark = SparkSession.builder \
.appName("Load " + schema_name + " " + table_name + " from Oracle into Parquet and creating Table") \
.getOrCreate()
这是从 Oracle
创建 table
我怎样才能得到这唯一的镶木地板:)
您说过,当您从 table select 获取数据时,您正在从 table 获取数据,并且您希望从特定分区获取数据。您是否尝试使用语法 PARTION(partition_name).
放置分区名称
你有多少个分区,如果不是太多那么你可以尝试为每个分区创建一个视图,然后select从视图中获取数据。
在名为 Checkes 的 Oracle 中创建 table
将分区名称添加到 table
在我可以从 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()
```
您好,我正在尝试将 Oracle 分区 table 到 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)
此代码获取 table 而非分区的所有数据。
spark = SparkSession.builder \
.appName("Load " + schema_name + " " + table_name + " from Oracle into Parquet and creating Table") \
.getOrCreate()
这是从 Oracle
创建 table我怎样才能得到这唯一的镶木地板:)
您说过,当您从 table select 获取数据时,您正在从 table 获取数据,并且您希望从特定分区获取数据。您是否尝试使用语法 PARTION(partition_name).
放置分区名称你有多少个分区,如果不是太多那么你可以尝试为每个分区创建一个视图,然后select从视图中获取数据。
在名为 Checkes 的 Oracle 中创建 table 将分区名称添加到 table 在我可以从 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()
```