在 Snappy shell 中创建的表不会显示在 JDBC 或 Pulse 中

Posted

技术标签:

【中文标题】在 Snappy shell 中创建的表不会显示在 JDBC 或 Pulse 中【英文标题】:Tables created in Snappy shell do not show up in JDBC or Pulse 【发布时间】:2016-07-25 23:21:59 【问题描述】:

SnappyData v.0-5

我遇到的问题是我的 JDBC 连接的表元数据和 Pulse Web App 看不到我在下面创建的表。

我使用 shell 和 csv 文件在 SnappyData 中创建了一个表。

数据在这里(roads.csv):

"roadId","name"
"1","Road 1"
"2","Road 2"
"3","Road 3"
"4","Road 4"
"5","Road 5"
"6","Road 6"
"7","Road 7"
"8","Road 8"
"9","Road 9"
"10","Road 10"

================================================ ===========

snappy>  CREATE TABLE STAGING_ROADS
(road_id string, name string)
USING com.databricks.spark.csv
OPTIONS(path '/home/ubuntu/data/example/roads.csv', header 'true');


snappy> select * from STAGING_ROADS

Returns 10 rows.

我有一个 SnappyData JDBC 连接(DBVisualizer 和 SquirrelSQL 显示相同)。 我在元数据的“表格”列表中看不到该表格。 但是,如果我执行“从 STAGING_ROADS 中选择 *”。

返回 10 行带有 CLOB 的行,顺便说一句,这些行完全不可用。

road_id  |      name
=====================
CLOB        CLOB
CLOB        CLOB
CLOB        CLOB
CLOB        CLOB
CLOB        CLOB
CLOB        CLOB
CLOB        CLOB
CLOB        CLOB
CLOB        CLOB
CLOB        CLOB

其次,当我从 snappy> shell 中创建表时,Pulse Web 应用程序没有注册我创建的表。但是,如果我从 JDBC 客户端运行 CREATE TABLE 命令,它会正常显示。

我做错了吗?如何获取有关我在 snappy> shell 中创建的表的元数据以显示在 JDBC 和 Pulse 中?

【问题讨论】:

【参考方案1】:

我遇到的问题是我的 JDBC 连接的表元数据和 Pulse Web App 看不到我在下面创建的表。

这是一个已知问题 (https://jira.snappydata.io/browse/SNAP-303)。 JDBC 元数据仅显示存储中的项目,而不显示外部表。在跟踪元数据问题时,Pulse webapp 将无法查看此类外部表,因为它旨在监控 snappydata 存储。

注意:“CREATE TABLE”DDL 已更改为“CREATE EXTERNAL TABLE”(https://github.com/SnappyDataInc/snappydata/pull/311),用于商店以外的来源,以使事情更清晰。

如何获取有关我在 snappy> shell 中创建的表的元数据以显示在 JDBC 和 Pulse 中?

它将显示内部 SnappyData 源:列和行表。对于 USING 中的其他提供者,它们不会如前所述显示。

CSV 表通常仅用于将数据加载到列或行表中,如@jagsr 提供的示例所示。

【讨论】:

【参考方案2】:

没想到使用 SQL 创建表,其中 Spark.csv 是数据源已经过测试。这是一个相关的 JIRA - https://jira.snappydata.io/browse/SNAP-416。

我们一直建议人们使用 Spark 作业来并行加载数据。您也可以使用 spark-shell 执行此操作。

        stagingRoadsDataFrame = snappyContext.read
        .format("com.databricks.spark.csv") 
        .option("header", "true") // Use first line of all files as header
        .option("inferSchema", "true") // Automatically infer data types
        .load(someFile)
// Save Dataframe as a Row table
      stagingRoadsDatFrame.write.format("row").options(props).saveAsTable("staging_roads")

也就是说,你能不能试试(也许这可能有用)-

 CREATE TABLE STAGING_ROADS (road_id varchar(100), name varchar(500))

请注意,SQL 中没有“字符串”作为数据类型。默认情况下,在不知道最大长度的情况下,我们将其转换为 CLOB。我们也在努力解决这个问题。

【讨论】:

这仍然显示 road_id 的 CLOB。 CREATE TABLE STAGING_ROAD (road_id varchar(64), name string) USING com.databricks.spark.csv OPTIONS(path '/home/ubuntu/data/example/roads.csv', header 'true');

以上是关于在 Snappy shell 中创建的表不会显示在 JDBC 或 Pulse 中的主要内容,如果未能解决你的问题,请参考以下文章

光标检索在 plpgsql 函数中创建的表中已删除的行

Navicat 8 for MySQL中创建的表为啥在mysql数据库中没有

Xcode Swift 调试器不会显示在 if 语句中创建的变量

Hibernate 看不到 HSQLDB 中创建的表

Hbase 无法创建带有snappy压缩属性的表

在 Lightswitch 中创建的不需要的表