如何在 SnappyData 中获取外部表 jdbc url
Posted
技术标签:
【中文标题】如何在 SnappyData 中获取外部表 jdbc url【英文标题】:How can I get external table jdbc url in SnappyData 【发布时间】:2018-11-20 08:09:15 【问题描述】:之前我在 SnappyData 中创建了一个外部表,如下所示:
create external table EXT_DIM_CITY
using jdbc options(url 'jdbc:mysql://***:5002/***?user=***&password=***',
driver 'com.mysql.jdbc.Driver',
dbtable 'dim_city');
但现在我忘记了 EXT_DIM_CITY 引用的 mysql jdbc url。如何从 SnappyData 获取 jdbc url?
【问题讨论】:
【参考方案1】:使用最新的 SnappyData 版本 1.0.2.1,所有表属性都可以通过扩展描述查看:
describe extended EXT_DIM_CITY
这些属性将显示在带有“Properties:”标签的“#Detailed Table Information”行下。请注意,从 snappy shell 运行时,您需要增加最大显示宽度才能看到字符串列的完整值(最大显示宽度 2000)。
但是,在这种情况下,url 属性值被故意屏蔽为“###”,因为它包含嵌入的密码。如果您分别指定了“用户”和“密码”选项,那么只有“密码”属性会被屏蔽,并且 url 将是可见的。
因此,在这种情况下,您可以改为编写一个作业来强制使用如下目录 API 直接显示值(Scala 代码):
package test
import java.io.PrintWriter
import com.typesafe.config.Config
import org.apache.spark.sql.catalyst.TableIdentifier
import org.apache.spark.sql._
object CatalogReadJob extends SnappySQLJob
override def runSnappyJob(session: SnappySession, jobConfig: Config): Any =
val catalog = session.sessionCatalog
val metadata = catalog.getTableMetadata(new TableIdentifier("EXT_DIM_CITY"))
// dump metadata properties to a file
new PrintWriter("/tmp/EXT_DIM_CITY-metadata.txt")
write(metadata.toString() + "\nFull URL = " + metadata.storage.properties("url"))
close()
override def isValidJob(ss: SnappySession, conf: Config): SnappyJobValidation = SnappyJobValid()
如果表位于默认“APP”以外的模式中,则在上面的 TableIdentifier 构造函数中使用 Some(“schema”)。使用 gradle/maven 等构建工具或直接使用 scalac 编译代码: scalac -classpath '/path/to/product/jars/*' CatalogReadJob.scala
创建一个 jar,比如 test.jar,然后提交: snappy-job.sh submit --lead :8090 --app-name CatalogRead --class test.CatalogReadJob --app-jar test.jar
应将 URL 和所有其他表属性转储到 /tmp/EXT_DIM_CITY-metadata.txt
【讨论】:
以上是关于如何在 SnappyData 中获取外部表 jdbc url的主要内容,如果未能解决你的问题,请参考以下文章
部署 SnappyData-0.5 pulse.war 时出现 Bean 缺失错误