Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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
读取Python中的SQL文件,通过DataRicks针对JDBC运行_Python_Python 3.x_Apache Spark_Databricks - Fatal编程技术网

读取Python中的SQL文件,通过DataRicks针对JDBC运行

读取Python中的SQL文件,通过DataRicks针对JDBC运行,python,python-3.x,apache-spark,databricks,Python,Python 3.x,Apache Spark,Databricks,我有一个SQL语句,我想在DataRicks中使用JDBC驱动程序对oracle数据库运行该语句。如果SQL语句很短,例如,如果它只是从一个没有筛选器的表中选择所有数据,那么我可以成功地运行它。。e、 g.从tbl中选择* 但是,我需要执行一个非常长的SQL代码,因此我要创建一个字符串,通过从保存在DataRicks文件存储中的.SQL文件加载它来传递给JDBC驱动程序 运行此命令时,我看到一个错误,在调查/打印文本文件的结果时,我发现它会删除一些SQL语句,并在恢复SQL语句之前提供一条消息:

我有一个SQL语句,我想在DataRicks中使用JDBC驱动程序对oracle数据库运行该语句。如果SQL语句很短,例如,如果它只是从一个没有筛选器的表中选择所有数据,那么我可以成功地运行它。。e、 g.从tbl中选择*

但是,我需要执行一个非常长的SQL代码,因此我要创建一个字符串,通过从保存在DataRicks文件存储中的.SQL文件加载它来传递给JDBC驱动程序

运行此命令时,我看到一个错误,在调查/打印文本文件的结果时,我发现它会删除一些SQL语句,并在恢复SQL语句之前提供一条消息:

*** WARNING: skipped 62431 bytes of output ***
实际上,它在打印字符串中看起来是这样的:

    sum (
        case
            when dpr.pricing_Type in ('P', 'C') then
                nvl (
                    decode (dpr.price / 100, null, 0,
                        decode (apr.price, 'N', 

*** WARNING: skipped 62431 bytes of output ***

        then
            dpr.percentage_applied
        else 
            0
        end
    ) as price_percent,
请注意,警告之前的代码用于与警告消息之后的代码完全不同的字段

对于这一问题的原因以及如何解决,是否有任何建议

下面是我运行的完整脚本,仅供参考,还请注意,我使用的.sql文件只有113kb,我通过DataRicks的运行时7.4使用python 3.7.5:

%python

# setup jdbc credentials (from key vault) and url
jdbcUsername = dbutils.secrets.get(scope="USER", key="ID")
jdbcPassword = dbutils.secrets.get(scope="PWD", key="PWD")
jdbcUrl = "jdbc:oracle:thin:@<REDACTED>"
jdbcDrv = "oracle.jdbc.driver.OracleDriver"

# Table Name
OutputTbl = "db.tblCore"

# Drop table. 
spark.sql("DROP TABLE IF EXISTS " + OutputTbl  )

# parallelism
lbound = 20160101
ubound = 20210115
fsize = "1000"
colname = "date_value_yyyymmdd"
numParts = "10"

# Get sql stetment from file.
with open('/dbfs/FileStore/shared_uploads/<REDACTED>/SQL', 'r') as f:
    sql = file.read()

# Create DF and write output to a table. 
spdf = (spark.read.format("jdbc")
  .option("driver", jdbcDrv)
  .option("url", jdbcUrl)
  .option("user", jdbcUsername)
  .option("password", jdbcPassword)
  .option("dbtable", sql)
  .option("numPartitions", numParts)
  .option("fetchsize", fsize)
  .option("partitionColumn", colname) 
  .option("lowerBound", lbound)
  .option("upperBound", ubound)
  .load())

spdf.write.mode("overwrite").saveAsTable(OutputTbl)

这不是一个错误,只是一个警告,说明输出被截断以防止浏览器过载等。您可以通过群集的Spark UI查看驱动程序和执行程序日志-应该有更多信息


我还建议首先尝试直接针对Oracle执行该声明,只是为了检查它是否有效

谢谢您的回复。当通过toad/sql developer直接在服务器上运行时,相同的查询成功执行。问题似乎是因为我忽略了我按下的查询周围的括号!