从 JDBC 创建 Spark 数据帧时如何指定 sql 方言?

2023-12-05

我在使用 Spark 通过自定义 JDBC 读取数据时遇到问题。我将如何覆盖通过 jdbc url 推断的 sql 方言?

有问题的数据库是 vitess (https://github.com/youtube/vitess)它运行一个 mysql 变体,所以我想指定一个 mysql 方言。 jdbc url 以 jdbc:vitess/ 开头

否则,DataFrameReader 会推断使用“””作为引用标识符的默认方言。因此,通过spark.read.jdbc 的查询将发送为

从表中选择“id”、“col2”、“col3”、“etc”

它选择字符串表示形式而不是列值 代替

从表中选择 id、col2、col3 等


也许已经太晚了。但接下来就是答案:

创建自定义方言,就像我对 ClickHouse 数据库所做的那样(我的 jdbc 连接 url 看起来像这样 jdbc:clickhouse://localhost:8123)

 private object ClickHouseDialect extends JdbcDialect {
    //override here quoting logic as you wish
    override def quoteIdentifier(colName: String): String = colName

    override def canHandle(url: String): Boolean = url.startsWith("jdbc:clickhouse")
  }

并将其注册到代码中的某个位置,如下所示:

JdbcDialects.registerDialect(ClickHouseDialect)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从 JDBC 创建 Spark 数据帧时如何指定 sql 方言? 的相关文章

随机推荐

  • 无法在 bash 脚本中运行 adb 命令

    我正在尝试从 adb shell 启动 Android 网络共享设置 这样做的主要目的是通过运行 shell 脚本来启用 USB 网络共享模式 我在 Ubuntu 终端 12 04 上使用以下命令集 adb shell am start n
  • Sublime Text 是否有查找打开文件的快捷方式(Eclipse Ctrl + E)?

    Ctrl P of Sublime Text lets me find a file from all project files However there are too many duplicated names I m lookin
  • OpenGL 窗口未打开

    我有来自 OpenGLBook openglbook com 的代码 它可以编译 但无法加载 我完全不知道为什么它没有加载 代码如下 main cpp include main h Methods int main int argc cha
  • C++等待用户输入[重复]

    这个问题在这里已经有答案了 在控制台应用程序中等待用户输入的最佳方法是什么 std cout lt lt press any key to exit wait for user to hit enter or another key 有多种
  • 使用for循环的索引访问变量的名称

    假设我有 4 个字符串 private string string 1 string 2 string 3 string 4 然后假设我有一个 for 循环 如何通过for循环的索引访问变量名 这是我正在谈论的内容的一个想法 for int
  • Oozie 抑制 shell 作业操作的日志记录?

    我有一个运行 shell 脚本的简单工作流程 见下文 shell 脚本运行 pyspark 脚本 该脚本将文件从本地移动到 hdfs 文件夹 当我运行 shell 脚本本身时 它工作得很好 日志在 shell 脚本中通过 gt spark
  • 像关系 SQL 数据库一样使用 JSon (Javascript)

    所以我有一个如下所示的 JSON 变量 var peopleList 1 Name Lisa item1 Name of Item 1 2 Name Marty 3 Name Jordan item1 Name of Item 1 item
  • 如何显示文本视图几秒钟然后使其不可见?

    这个网站是最好的 它对我帮助很大 我是创建 android applecation 的初学者 这是我第一次在这里问问题 我的问题是如何显示一个文本视图5秒并使其消失 当我搜索时我发现了一些代码 但我不知道如何使用它或者也许我使用它以错误的方
  • 输入[类型=文件]验证

    如何检查输入文件是否不为空 我试过 image file click function if image file val alert Chose a file return false 但没有成功 The click事件被触发before
  • Sweave 文档中 R 注释中对图形的动态引用

    我想找到一种使用 LaTeX 的方法 ref 用于在 Sweave Rnw 文件中的 R 代码中进行注释的标记 这里有两个例子 一个是印刷版的 http cm bell labs com cm ms departments sia proj
  • SetLayeredWindowAttributes 使窗口透明仅在部分时间起作用

    我试图使窗口透明 以便只有部分内容可见 我尝试使用SetLayeredWindowAttributes为了实现这一点 这使窗口按照我想要的方式透明 但是只有当窗口图片的一部分位于桌面可见区域之外时 它才有效 由于某种原因 每当窗口完全在屏幕
  • 声音录制

    我是 Android 新手 我正在尝试构建一个应用程序来记录音频数据 我正在使用带有 ADT 插件的 Eclipse Galileo IDE 我的应用程序针对的是 Andriod 2 1 平台 不幸的是example开发指南中提供的抛出许多
  • Python - 导入包失败

    我在导入包时遇到问题 我的文件结构是这样的 filelib init py converters init py cmp2locus py modelmaker init py command file py 模块内command file
  • 我在运行 ant build 时收到“**** 错误的 JAVA 版本 ****”

    我的问题不是这个问题 因为我的java版本没有差异 我安装了 java 1 8 45 jdk 和 jre 后 运行 ant clean all 的构建失败 它说 Java 版本错误 环境检查失败 您使用的版本不受支持 爪哇 请确保您使用的是
  • 如何在 JPQL 或 HQL 查询中使用 MySQL CONVERT_TZ 函数

    我目前有一个表MySQL数据库有一个startDate and endDate两者都是timestamps 这与使用 hibernate 的代码相关联 我可以使用以下 HQL 返回这些 SELECT startDate endDate FR
  • 迭代目录中的所有文件并查找和替换文本 - Python

    宝贝全新 这是弗兰肯斯坦从几个类似的主题组合在一起的 其中没有一个似乎涵盖了在文件循环中嵌套查找和替换的必要步骤 我试图迭代特定类型 此处列为 LIC 的文件夹中的每个文件 不是递归 我只有一个文件夹级别 并替换一小段文本 以下是我所能得出
  • MSBuild XmlMassUpdate 任务

    我想问一个有关 MSBuild 任务 XmlMassUpdate 行为的简单问题 有没有人发现该任务只会将唯一节点复制到内容 XML 中 例如 如果我有一个客户端节点 它有多个称为端点的子节点 那么它只会批量复制第一个端点节点 同时消除所有
  • 如何使用spring全局配置jackson?

    为了序列化反序列化对象 我使用 Jackson 作为流程 JsonSerialize using LocalDateSerializer class JsonDeserialize using LocalDateDeserializer c
  • 如何在本机反应中隐藏特定屏幕上的底部导航栏?

    我正在使用 React Native 和 React Native Navigation 来构建我的应用程序 目前 我有三个底部选项卡 主页 上传视频和消息 选择 上传视频 选项卡后 我想渲染 上传视频 组件并隐藏该屏幕上的底部选项卡 并显
  • 从 JDBC 创建 Spark 数据帧时如何指定 sql 方言?

    我在使用 Spark 通过自定义 JDBC 读取数据时遇到问题 我将如何覆盖通过 jdbc url 推断的 sql 方言 有问题的数据库是 vitess https github com youtube vitess 它运行一个 mysql