- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 memsql 上尝试 TPCH DDL 查询。我是 memsql 的新手。我无法将 5 个 TPCH ddl sql 查询转换为 memsql 查询。无法使用 memsql 的 FOREIGH SHARD KEY 概念实现外键关系。 请帮助我将 8 个表创建查询中的以下 5 个转换为 memsql 查询。努力尝试但面临很多不同的问题。
CREATE TABLE REGION ( R_REGIONKEY INTEGER NOT NULL PRIMARY KEY,
R_NAME CHAR(25) NOT NULL,
R_COMMENT VARCHAR(152)
);
CREATE TABLE NATION ( N_NATIONKEY INTEGER NOT NULL PRIMARY KEY,
N_NAME CHAR(25) NOT NULL,
N_REGIONKEY INTEGER NOT NULL REFERENCES REGION(R_REGIONKEY),
N_COMMENT VARCHAR(152)
);
CREATE TABLE PART ( P_PARTKEY INTEGER NOT NULL PRIMARY KEY,
P_NAME VARCHAR(55) NOT NULL,
P_MFGR CHAR(25) NOT NULL,
P_BRAND CHAR(10) NOT NULL,
P_TYPE VARCHAR(25) NOT NULL,
P_SIZE INTEGER NOT NULL,
P_CONTAINER CHAR(10) NOT NULL,
P_RETAILPRICE DECIMAL(15,2) NOT NULL,
P_COMMENT VARCHAR(23) NOT NULL
);
CREATE TABLE SUPPLIER ( S_SUPPKEY INTEGER NOT NULL PRIMARY KEY,
S_NAME CHAR(25) NOT NULL,
S_ADDRESS VARCHAR(40) NOT NULL,
S_NATIONKEY INTEGER NOT NULL REFERENCES NATION(N_NATIONKEY),
S_PHONE CHAR(15) NOT NULL,
S_ACCTBAL DECIMAL(15,2) NOT NULL,
S_COMMENT VARCHAR(101) NOT NULL
);
CREATE TABLE PARTSUPP ( PS_PARTKEY INTEGER NOT NULL REFERENCES PART(P_PARTKEY),
PS_SUPPKEY INTEGER NOT NULL REFERENCES SUPPLIER(S_SUPPKEY),
PS_AVAILQTY INTEGER NOT NULL,
PS_SUPPLYCOST DECIMAL(15,2) NOT NULL,
PS_COMMENT VARCHAR(199) NOT NULL,
PRIMARY KEY (PS_PARTKEY, PS_SUPPKEY)
);
CREATE TABLE CUSTOMER ( C_CUSTKEY INTEGER NOT NULL PRIMARY KEY,
C_NAME VARCHAR(25) NOT NULL,
C_ADDRESS VARCHAR(40) NOT NULL,
C_NATIONKEY INTEGER NOT NULL REFERENCES NATION(N_NATIONKEY),
C_PHONE CHAR(15) NOT NULL,
C_ACCTBAL DECIMAL(15,2) NOT NULL,
C_MKTSEGMENT CHAR(10) NOT NULL,
C_COMMENT VARCHAR(117) NOT NULL
);
CREATE TABLE ORDERS ( O_ORDERKEY INTEGER NOT NULL PRIMARY KEY,
O_CUSTKEY INTEGER NOT NULL REFERENCES CUSTOMER(C_CUSTKEY),
O_ORDERSTATUS CHAR(1) NOT NULL,
O_TOTALPRICE DECIMAL(15,2) NOT NULL,
O_ORDERDATE DATE NOT NULL,
O_ORDERPRIORITY CHAR(15) NOT NULL,
O_CLERK CHAR(15) NOT NULL,
O_SHIPPRIORITY INTEGER NOT NULL,
O_COMMENT VARCHAR(79) NOT NULL
);
CREATE TABLE LINEITEM ( L_ORDERKEY INTEGER NOT NULL REFERENCES ORDERS(O_ORDERKEY),
L_PARTKEY INTEGER NOT NULL REFERENCES PART(P_PARTKEY),
L_SUPPKEY INTEGER NOT NULL REFERENCES SUPPLIER(S_SUPPKEY),
L_LINENUMBER INTEGER NOT NULL,
L_QUANTITY DECIMAL(15,2) NOT NULL,
L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
L_DISCOUNT DECIMAL(15,2) NOT NULL,
L_TAX DECIMAL(15,2) NOT NULL,
L_RETURNFLAG CHAR(1) NOT NULL,
L_LINESTATUS CHAR(1) NOT NULL,
L_SHIPDATE DATE NOT NULL,
L_COMMITDATE DATE NOT NULL,
L_RECEIPTDATE DATE NOT NULL,
L_SHIPINSTRUCT CHAR(25) NOT NULL,
L_SHIPMODE CHAR(10) NOT NULL,
L_COMMENT VARCHAR(44) NOT NULL,
PRIMARY KEY (L_ORDERKEY,L_LINENUMBER),
FOREIGN KEY (L_PARTKEY,L_SUPPKEY) REFERENCES PARTSUPP(PS_PARTKEY, PS_SUPPKEY)
);
我能够在 memsql 中创建前 3 个表,但不能创建剩余的表。第 1 和第 3 个查询非常简单,并且按原样工作。我能够创建第二个表,但再次不确定这是否是正确的实现方式。
CREATE TABLE NATION ( N_NATIONKEY INTEGER NOT NULL,
N_NAME CHAR(25) NOT NULL,
N_REGIONKEY INTEGER NOT NULL,
N_COMMENT VARCHAR(152),
FOREIGN SHARD KEY (N_REGIONKEY) REFERENCES REGION (R_REGIONKEY),
PRIMARY KEY (N_NATIONKEY, N_REGIONKEY)
);
是否可以在memsql中只创建复制表而不创建分区?以及如何?
最佳答案
由于 MemSQL 不支持参照完整性,外部分片键是一种优化辅助手段,不是必需的。尽管外部分片键确实允许您在创建表时知道两个表可以在该键上本地连接(无网络流量)。但是,优化器不需要外部分片键来利用此数据局部性。
从 ORDERS
和 LINEITEM
表开始:
CREATE TABLE ORDERS ( O_ORDERKEY INTEGER NOT NULL PRIMARY KEY,
O_CUSTKEY INTEGER NOT NULL,
O_ORDERSTATUS CHAR(1) NOT NULL,
O_TOTALPRICE DECIMAL(15,2) NOT NULL,
O_ORDERDATE DATE NOT NULL,
O_ORDERPRIORITY CHAR(15) NOT NULL,
O_CLERK CHAR(15) NOT NULL,
O_SHIPPRIORITY INTEGER NOT NULL,
O_COMMENT VARCHAR(79) NOT NULL,
KEY (O_CUSTKEY)
);
CREATE TABLE LINEITEM ( L_ORDERKEY INTEGER NOT NULL,
L_PARTKEY INTEGER NOT NULL,
L_SUPPKEY INTEGER NOT NULL,
L_LINENUMBER INTEGER NOT NULL,
L_QUANTITY DECIMAL(15,2) NOT NULL,
L_EXTENDEDPRICE DECIMAL(15,2) NOT NULL,
L_DISCOUNT DECIMAL(15,2) NOT NULL,
L_TAX DECIMAL(15,2) NOT NULL,
L_RETURNFLAG CHAR(1) NOT NULL,
L_LINESTATUS CHAR(1) NOT NULL,
L_SHIPDATE DATE NOT NULL,
L_COMMITDATE DATE NOT NULL,
L_RECEIPTDATE DATE NOT NULL,
L_SHIPINSTRUCT CHAR(25) NOT NULL,
L_SHIPMODE CHAR(10) NOT NULL,
L_COMMENT VARCHAR(44) NOT NULL,
PRIMARY KEY (L_ORDERKEY,L_LINENUMBER),
FOREIGN SHARD KEY (L_ORDERKEY) REFERENCES ORDERS (O_ORDERKEY),
KEY (L_PARTKEY),
KEY (L_SUPPKEY)
);
在这种情况下,我们知道我们可以利用 ORDERS
和 LINEITEM
之间的本地连接,因为它们都在 ORDERKEY
上分片。 ORDERS
和 LINEITEM
是 TPCH 中最大的两个表,因此我们要确保它们可以在本地连接。由于 ORDERS
的主键是 O_ORDERKEY
,因此我不需要为 ORDERS
指定分片键。 MemSQL 将自动按 O_ORDERKEY
进行分片。
我还在其余的外键列上放置了二级索引。这很有用,因为外键上会有连接。
将这些概念应用于 PART
、PARTSUPP
、SUPPLIER
和 CUSTOMER
:
CREATE TABLE CUSTOMER ( C_CUSTKEY INTEGER NOT NULL PRIMARY KEY,
C_NAME VARCHAR(25) NOT NULL,
C_ADDRESS VARCHAR(40) NOT NULL,
C_NATIONKEY INTEGER NOT NULL,
C_PHONE CHAR(15) NOT NULL,
C_ACCTBAL DECIMAL(15,2) NOT NULL,
C_MKTSEGMENT CHAR(10) NOT NULL,
C_COMMENT VARCHAR(117) NOT NULL,
KEY(C_NATIONKEY)
);
CREATE TABLE SUPPLIER ( S_SUPPKEY INTEGER NOT NULL PRIMARY KEY,
S_NAME CHAR(25) NOT NULL,
S_ADDRESS VARCHAR(40) NOT NULL,
S_NATIONKEY INTEGER NOT NULL,
S_PHONE CHAR(15) NOT NULL,
S_ACCTBAL DECIMAL(15,2) NOT NULL,
S_COMMENT VARCHAR(101) NOT NULL,
KEY(S_NATIONKEY)
);
CREATE TABLE PART ( P_PARTKEY INTEGER NOT NULL PRIMARY KEY,
P_NAME VARCHAR(55) NOT NULL,
P_MFGR CHAR(25) NOT NULL,
P_BRAND CHAR(10) NOT NULL,
P_TYPE VARCHAR(25) NOT NULL,
P_SIZE INTEGER NOT NULL,
P_CONTAINER CHAR(10) NOT NULL,
P_RETAILPRICE DECIMAL(15,2) NOT NULL,
P_COMMENT VARCHAR(23) NOT NULL
);
CREATE TABLE PARTSUPP ( PS_PARTKEY INTEGER NOT NULL,
PS_SUPPKEY INTEGER NOT NULL,
PS_AVAILQTY INTEGER NOT NULL,
PS_SUPPLYCOST DECIMAL(15,2) NOT NULL,
PS_COMMENT VARCHAR(199) NOT NULL,
PRIMARY KEY (PS_PARTKEY, PS_SUPPKEY),
SHARD KEY(PS_PARTKEY),
KEY(PS_SUPPKEY)
);
尽管 PARTSUPP
和 PART
都在同一个键 (PARTKEY) 上进行分片,但我不需要指定外部分片键来利用本地分片在那把 key 上加入他们;优化器会自动选择它。
在回答您的最后一个问题时,MemSQL 确实允许您创建复制表而不是分区表。这称为 reference table并且对于 NATION
和 REGION
表非常有用,因为它们非常小。引用表不是运行分布式查询所必需的,但却是一种有用的优化。
CREATE REFERENCE TABLE REGION ( R_REGIONKEY INTEGER NOT NULL PRIMARY KEY,
R_NAME CHAR(25) NOT NULL,
R_COMMENT VARCHAR(152)
);
CREATE REFERENCE TABLE NATION ( N_NATIONKEY INTEGER NOT NULL PRIMARY KEY,
N_NAME CHAR(25) NOT NULL,
N_REGIONKEY INTEGER NOT NULL,
N_COMMENT VARCHAR(152)
);
有关所有内容的更多文档,请查看: http://docs.memsql.com/latest/concepts/distributed_sql/
关于mysql - Memsql TPCH 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32755085/
我正在尝试使用 golang 在 memsql 中执行查询。但我不断出错。“MemSQL 不支持服务器端准备好的语句。” 我什至使用了“interpolateParams=true”,但仍然出现同样的
这里提到的错误:http://docs.memsql.com/latest/tshoot/2002/我正在使用 Ubuntu 14.04.2。 MySQL 客户端和最新的 MemSQL 建议将“my.
我发现 MEMSql 不支持用户定义的变量 ( source )。 有什么解决方法吗?它会出现在未来的版本中吗? 我想通过用户定义的变量进行SQL 注入(inject)保护。还有其他好的方法吗? 最佳
我有一个 MemSQL 集群,它有 1 个主聚合器和 3 个叶节点。主聚合器和 3 个叶节点分别运行在不同的服务器上,因此总共有 4 个服务器。 每天,主聚合器服务器上都会运行一个进程,该进程会截断
我有一种情况,我需要一个代理键 (id) 来代替复合键(4 个字段组合起来是唯一的:project_id、dataset_id、table_id、view_name) 以便在其他表中轻松引用它。 为此
在CentOS x64上遵循Quick-Start Guide to installMemSQL,4核,12 GB RAM。 当运行./install.sh作为root时,MemSQL会成功安装,但会
MySQL 似乎也有相同的 4096 列限制。有什么方法可以覆盖它并创建更大的表,例如。列存储格式? 最佳答案 MemSQL 中的列限制目前为 4096,并且不可调整。解决它的最佳方法是使用 JSON
我在一台机器上安装了 Memsql 功能测试,聚合节点位于端口 3307 和叶节点 3306。在运行查询时,可能会有额外的 CPU 可用。因此,是否可以在同一台机器上添加更多叶节点以利用可用资源? 我
我是 MemSQL 新手。我在具有 5 个叶节点和 2 个聚合器节点的集群上的 MemSQL 中创建了一个数据库和表。 Spark 正在同一个集群上运行。一切都处于默认模式。插入数据和删除数据相同。
我在 Ubuntu 14 LTS 上安装了 MemSQL 的单服务器集群。我无法连接到端口 3306 上的 memsql,但集群正在端口 9000 上运行。好像一片叶子掉下来了。当我尝试将 memsq
新的MemSQL版本可以计算多边形的并集吗?例如计算两个相邻甚至截取多边形的边界? +----+ | | | +-+--+ +--+-+ | | | +----+ 到 +-
我想在 memsql 中有一个完整的外部联接。就像是 SELECT * FROM A FULL OUTER JOIN B ON A.id = B.id 是否可以 ? 最佳答案 MemSQL 似乎没有
我们有两个表: dates 表,包含过去 10 年和 future 10 年的每天一个日期。 states 表包含以下列:start_date、end_date、state。 我们运行的查询如下所示:
我正在使用 Liquibase 来管理我的数据库迁移。与导致问题的 MySQL 相比,MemSQL 命令似乎有所不同。 我正在通过 Liquibase 运行以下命令:- ALTER TABLE tes
我们使用 memsql 列式存储数据库。我们为后端架构中的每个“偶数类型”创建管道,并为其创建一个专用表(我们称之为“源表”)。因此每个管道都会写入 memsql 上的一张表(也称为源表) 我们为客户
我正在 memsql 上尝试 TPCH DDL 查询。我是 memsql 的新手。我无法将 5 个 TPCH ddl sql 查询转换为 memsql 查询。无法使用 memsql 的 FOREIGH
我正在尝试将 blob 插入到我的 MemSQL 数据库中。 这是我插入源代码的地方,所以我将它转换成一个 blob: byte[] bytes = rs.getString(2).getBytes(
我需要首先指出,我绝不是数据库专家。我确实知道如何使用需要数据库后端的多种语言来编写应用程序,并且对 MySQL、Microsoft SQL Server 和现在的 MEMSQL 相对熟悉——但同样,
将节点(叶节点或聚合器)添加到 memSQL 集群非常简单:我编辑了 memsql_cluster.json 并重新运行 memsql-cluster 设置。问题是向现有表添加分区。这里的要点是向上扩
我想使用 GORM 域对象在我的 MemSQL 数据库中创建一个引用表。这将允许我们的 Grails 服务器在 MemSQL 中创建/删除引用表以进行开发。 除了在表上指定主键之外,是否可以使用 GO
我是一名优秀的程序员,十分优秀!