Python 如何使用Spark将日期变量传递给Teradata?
环顾四周,但还没找到这个问题。。。我在Jupyter笔记本中编写python代码,我们使用的很多数据集都是Teradata,因此我的代码通常如下所示:Python 如何使用Spark将日期变量传递给Teradata?,python,apache-spark,jupyter-notebook,teradata,Python,Apache Spark,Jupyter Notebook,Teradata,环顾四周,但还没找到这个问题。。。我在Jupyter笔记本中编写python代码,我们使用的很多数据集都是Teradata,因此我的代码通常如下所示: cs = ''' ( select * from SST01.data where snap_dt = '2020-08-31' )foo''' dfclnt_status = spark.read.format('jdbc') \ .option('url', 'jdbc:teradata://teradataservernameh
cs = '''
(
select
*
from SST01.data
where snap_dt = '2020-08-31'
)foo'''
dfclnt_status = spark.read.format('jdbc') \
.option('url', 'jdbc:teradata://teradataservernamehere') \
.option('driver', 'com.teradata.jdbc.TeraDriver') \
.option('user', 'redacted') \
.option('password', PASS) \
.option('dbtable', cs) \
.load()
END_DT='2020-08-31'
我知道,在spark中,当对配置单元表运行代码时,我可以使用{VAR}传递日期变量,但当我尝试在对Teradata的查询中应用相同的内容时,我会遇到以下错误:
Py4JJavaError: An error occurred while calling o233.load.
: java.sql.SQLException: [Teradata Database] [TeraJDBC 16.30.00.00] [Error 3535] [SQLState 22003] A character string failed conversion to a numeric value.
如何将日期变量传递到Teradata中
编辑:我的变量如下所示:
cs = '''
(
select
*
from SST01.data
where snap_dt = '2020-08-31'
)foo'''
dfclnt_status = spark.read.format('jdbc') \
.option('url', 'jdbc:teradata://teradataservernamehere') \
.option('driver', 'com.teradata.jdbc.TeraDriver') \
.option('user', 'redacted') \
.option('password', PASS) \
.option('dbtable', cs) \
.load()
END_DT='2020-08-31'
最简单的方法可能是将字段显式转换为日期,如下所示:
to_date('2020-08-31')
如果仍然出现错误,请查看DDL表。错误表明该字段是数字字段