Jos*_*ice 7 sql jdbc apache-spark apache-spark-sql spark-jdbc
如果您有一个表,其中的列类型为 SQL ARRAY,那么如何找到数组类型的基本类型,即数组类型的各个元素的类型?
这里也提出了类似的问题:
然而,我要求通过 JDBC API 本身提供一种与供应商无关的方式。我问:如何使用与供应商无关的纯 JDBC 来解决这个问题?这个用例似乎是 JDBC 的核心用例,我真的很惊讶我在 JDBC 中找不到解决方案。
我花了几个小时反复阅读 JDBC API javadocs,又花了几个小时在互联网上搜索,令我感到非常惊讶的是,似乎没有通过 JDBC API 执行此操作的正确方法。它应该通过 DatabaseMetaData 或 ResultSetMetaData 就在那里,但显然不是。
以下是我发现的不足的解决方法和替代方案。
我的背景是,我想在我公司产品的 Spark in Cloud 中使用供应商提供的 JDBC 连接器,并且元数据发现变得很重要。我还在研究自己为其他还没有 JDBC 驱动程序或 Spark 连接器的数据源编写 JDBC 连接器的可行性。元数据发现非常重要,这样人们才能正确定义 Spark InternalRow 和 Spark-JDBC 数据获取器。目前,Spark-JDBC 对 SQL ARRAY 和 SQL STRUCT 的支持非常有限,但我设法用一两天的编码来提供缺失的位,但在此过程中我遇到了这个阻碍我的问题。如果我可以控制 JDBC 驱动程序实现,那么我可以使用拼凑(即在类型名称中编码类型信息,并在 Spark JdbcDialect 中获取类型名称并对其进行解码以创建 Catalyst 类型)。但是,我想以正确的 JDBC 方式执行此操作,并且理想情况下,我想以某些其他供应商提供的 JDBC 驱动程序支持的方式执行此操作。
PS:我花了相当多的时间才找到 DatabaseMetaData.getAttributes()。如果我没看错的话,这可以给我 SQL STRUCT 的字段/属性的名称和类型。同样,我感到非常惊讶的是,我可以在与供应商无关的纯 JDBC 中获取 SQL STRUCT 的字段/属性的名称和类型,但无法在与供应商无关的纯 JDBC 中获取 SQL ARRAY 的基本类型。
| 归档时间: |
|
| 查看次数: |
258 次 |
| 最近记录: |