我如何在SnappyData中获取外部表的JDBC URL

时间:2018-11-20 08:09:16

标签: apache-spark jdbc external snappydata

以前,我在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网址?

1 个答案:

答案 0 :(得分:1)

在最新的SnappyData版本1.0.2.1中,可以使用扩展描述看到所有表属性:

describe extended EXT_DIM_CITY

这些属性将在带有“属性:”标签的“#详细表信息”行下可见。请注意,从灵活的shell运行时,您需要增加最大显示宽度以查看字符串列的完整值(最大显示宽度2000)。

但是,在这种情况下,故意将url属性值屏蔽为“ ###”,因为它包含嵌入式密码。如果您分别指定了“用户”和“密码”选项,则只有“ password”属性会被屏蔽,而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