【问题标题】:Databricks Secrets with Apache Spark SQL Connecting to Oracle使用 Apache Spark SQL 连接到 Oracle 的 Databricks 秘密
【发布时间】:2021-03-01 03:22:37
【问题描述】:

我正在使用 spark SQL 从 Oracle 数据库中提取表,其中一些相当大,作为表放入 Azure 数据块中,这样我就可以在它们上运行作业并让它们可见以供团队使用。随着数据的变化和更新,我需要每天提取它们,并且我还想通过使用 Azure Key Vault / Secrets 传递我的编辑凭据来获取它们。

我已经设置了秘密,我可以在 Python 中运行一个进程来完成所有这些操作,但是,对于较大的表,从数据帧写入表时速度太慢。

我知道我可以在 spark SQL 中使用以下方法更快地完成此操作,并且可以在比使用 python 的一小部分时间内成功提取几乎所有表。但是,我似乎无法将其设置为来源并传递用户名和密码的秘密。

%sql

CREATE TABLE <table-out>
USING org.apache.spark.sql.jdbc
OPTIONS (
  dbtable '<table-source>',
  driver 'oracle.jdbc.driver.OracleDriver',
  user '<username>',
  password '<password>',
  url 'jdbc:oracle:thin:@//<server>:<port>');

在 Python 中,我会使用 dbutils 获得以下秘密:

%python
jdbcUsername = dbutils.secrets.get(scope="jdbc", key="<key>")

在上面的 SQL 方法中,有没有等效的方法可以做到这一点。 我意识到我仍然需要优化任何表格,但当我到达它时会跨越那座桥。

任何帮助将不胜感激。

谢谢, c2

【问题讨论】:

    标签: sql azure apache-spark apache-spark-sql databricks


    【解决方案1】:

    所以我设法通过将 SQL 语句作为字符串提交到 spark.sql 执行来做到这一点:

    sqlQry = '''
    CREATE TABLE IF NOT EXISTS {4}{1}
    USING org.apache.spark.sql.jdbc
    OPTIONS (
      driver 'oracle.jdbc.driver.OracleDriver',
      url '{0}',
      dbtable '{1}',
      user '{2}',
      password '{3}')'''.format(jdbcUrl, line, jdbcUsername, jdbcPassword, dbloc)
    
    spark.sql(sqlQry)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2022-10-04
      • 2021-10-31
      • 1970-01-01
      • 1970-01-01
      • 2015-11-16
      • 1970-01-01
      相关资源
      最近更新 更多