Snappydata 无法从CSV文件为复制的持久表编写脚本

Snappydata 无法从CSV文件为复制的持久表编写脚本,snappydata,Snappydata,SnappyData v.0-5 目标:我想创建一个持久的、复制的路表,并使用Snappy Shell从CSV文件加载它。路表应将“ROAD_id”作为主键,以防止重复id 我尝试的命令是: 这是行不通的。而且,我必须在我的道路上哑口无言地创造这个,使它甚至被创造出来。这没有PK。它没有复制或持久性 CREATE TABLE ROAD USING row OPTIONS () AS (select road_id, name from STAGING_ROAD); 我应该如何编写SnappyD

SnappyData v.0-5

目标:我想创建一个持久的、复制的路表,并使用Snappy Shell从CSV文件加载它。路表应将“ROAD_id”作为主键,以防止重复id

我尝试的命令是: 这是行不通的。而且,我必须在我的道路上哑口无言地创造这个,使它甚至被创造出来。这没有PK。它没有复制或持久性

CREATE TABLE ROAD USING row OPTIONS ()
AS (select road_id, name from STAGING_ROAD);

我应该如何编写SnappyData SQL文件的脚本以实现上述目标?

您可以使用以下脚本实现同样的目标:

CREATE TABLE STAGING_ROAD USING com.databricks.spark.csv OPTIONS(path 'roads.csv', header 'true',inferSchema 'true');

CREATE TABLE STAGING_ROAD2 USING row AS (SELECT road_id,name FROM STAGING_ROAD);

CREATE TABLE ROAD
(
    road_id VARCHAR(64) NOT NULL PRIMARY KEY,
    name VARCHAR(64) NOT NULL
) USING row OPTIONS (PARTITION_BY 'road_id', BUCKETS '5', PERSISTENT 'ASYNCHRONOUS');

INSERT INTO ROAD SELECT road_id, name from STAGING_ROAD2;

DROP TABLE STAGING_ROAD2;
STAGING_ROAD2的创建是由于最新版本中不需要的错误造成的

通过编程,您可以用更简单的方式来实现它,如下所示

String roadCsvFile = "road.csv";

snc.sql("CREATE TABLE ROAD( road_id VARCHAR(64) NOT NULL PRIMARY KEY,  name VARCHAR(64) NOT NULL) USING row OPTIONS (PARTITION_BY 'road_id', BUCKETS '5', PERSISTENT 'ASYNCHRONOUS')");

DataFrame roadDf = snc.read()
         .format("com.databricks.spark.csv") // CSV to DF package
         .option("header", "true") // Use first line of all files as header
         .option("inferSchema", "true") // Automatically infer data types
         .load(roadCsvFile);

// Populate the table in snappy store
roadDf.write().insertInto("ROAD");

您可以使用以下脚本实现相同的功能:

CREATE TABLE STAGING_ROAD USING com.databricks.spark.csv OPTIONS(path 'roads.csv', header 'true',inferSchema 'true');

CREATE TABLE STAGING_ROAD2 USING row AS (SELECT road_id,name FROM STAGING_ROAD);

CREATE TABLE ROAD
(
    road_id VARCHAR(64) NOT NULL PRIMARY KEY,
    name VARCHAR(64) NOT NULL
) USING row OPTIONS (PARTITION_BY 'road_id', BUCKETS '5', PERSISTENT 'ASYNCHRONOUS');

INSERT INTO ROAD SELECT road_id, name from STAGING_ROAD2;

DROP TABLE STAGING_ROAD2;
STAGING_ROAD2的创建是由于最新版本中不需要的错误造成的

通过编程,您可以用更简单的方式来实现它,如下所示

String roadCsvFile = "road.csv";

snc.sql("CREATE TABLE ROAD( road_id VARCHAR(64) NOT NULL PRIMARY KEY,  name VARCHAR(64) NOT NULL) USING row OPTIONS (PARTITION_BY 'road_id', BUCKETS '5', PERSISTENT 'ASYNCHRONOUS')");

DataFrame roadDf = snc.read()
         .format("com.databricks.spark.csv") // CSV to DF package
         .option("header", "true") // Use first line of all files as header
         .option("inferSchema", "true") // Automatically infer data types
         .load(roadCsvFile);

// Populate the table in snappy store
roadDf.write().insertInto("ROAD");

这里有几点。由于要设置一些约束,需要首先创建表。然后可以将数据插入表中

创建表ROAD ROAD_id VARCHAR64 NOT NULL,名称VARCHAR64 NOT NULL,约束ROAD_PK主键ROAD_id使用行选项持久化; 您不必指定REPLICATE关键字not needed,默认值为REPLICATE或BUCKET参数,这仅适用于分区表

b理想情况下,应将其插入道路选择*中。不幸的是,我们没有SQL支持从外部数据(如csv、0.5版本中的拼花)批量插入,我假设您正在使用。这一点已在最新的master中得到注意,并将在后续版本中提供

c解决方法是编写一个Spark作业并插入到创建的行表中。您可以参考文档的一节


如果你需要其他信息,请告诉我

这里有几点。由于要设置一些约束,需要首先创建表。然后可以将数据插入表中

创建表ROAD ROAD_id VARCHAR64 NOT NULL,名称VARCHAR64 NOT NULL,约束ROAD_PK主键ROAD_id使用行选项持久化; 您不必指定REPLICATE关键字not needed,默认值为REPLICATE或BUCKET参数,这仅适用于分区表

b理想情况下,应将其插入道路选择*中。不幸的是,我们没有SQL支持从外部数据(如csv、0.5版本中的拼花)批量插入,我假设您正在使用。这一点已在最新的master中得到注意,并将在后续版本中提供

c解决方法是编写一个Spark作业并插入到创建的行表中。您可以参考文档的一节


如果你需要其他信息,请告诉我

我不清楚SRC_SYS和TRD_DATE做什么。我也不明白CSV中的所有行实际上是如何进入最终表的。CSV中的行被加载到STAGING_ROAD,然后加载到STAGING_ROAD2。最后,它被插入到带有所有约束的最终表中。我不清楚SRC_SYS和TRD_DATE做什么。我也不明白CSV中的所有行实际上是如何进入最终表的。CSV中的行被加载到STAGING_ROAD,然后加载到STAGING_ROAD2。最后,它被插入到带有所有约束等的最终表中。