这个问题是一个跟进到这一个.我正在尝试使用apache beam从google spanner表中读取数据(然后进行一些数据处理).我使用java SDK编写了以下最小示例:
package com.google.cloud.dataflow.examples;
import java.io.IOException;
import org.apache.beam.sdk.Pipeline;
import org.apache.beam.sdk.PipelineResult;
import org.apache.beam.sdk.io.gcp.spanner.SpannerIO;
import org.apache.beam.sdk.options.PipelineOptions;
import org.apache.beam.sdk.options.PipelineOptionsFactory;
import org.apache.beam.sdk.values.PCollection;
import com.google.cloud.spanner.Struct;
public class backup {
public static void main(String[] args) throws IOException {
PipelineOptions options = PipelineOptionsFactory.create();
Pipeline p = Pipeline.create(options);
PCollection<Struct> rows = p.apply(
SpannerIO.read()
.withInstanceId("my_instance")
.withDatabaseId("my_db")
.withQuery("SELECT t.table_name FROM information_schema.tables AS t")
);
PipelineResult result = p.run();
try {
result.waitUntilFinish();
} catch (Exception exc) {
result.cancel();
}
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用DirectRunner执行代码时,我收到以下错误消息:
org.apache.beam.runners.direct.repackaged.com.google.common.util.concurrent.UncheckedExecutionException:
org.apache.beam.sdk.util.UserCodeException:java.lang.NoClassDefFoundError:无法初始化类com.google.cloud.spanner.spi.v1.SpannerErrorInterceptor
[...]引起:org.apache.beam.sdk.util.UserCodeException:java.lang.NoClassDefFoundError:无法初始化类com.google.cloud.spanner.spi.v1.SpannerErrorInterceptor
[...]引起:java.lang.NoClassDefFoundError:无法初始化类com.google.cloud.spanner.spi.v1.SpannerErrorInterceptor
或者,使用DataflowRunner: …
我试图使用Apache Beam创建一个Dataflow管道,我无法按照文档,找不到任何示例.
管道很简单.
目前,我陷入了第2步.我找不到任何关于如何从pub/sub读取并使用它的示例.
这是我到目前为止所希望的代码
class ExtractFlowInfoFn extends DoFn<PubsubMessage, KV<String, String>> {
public void processElement(ProcessContext c) {
KV.of("key", "value");
}
}
public static void main(String[] args) {
Pipeline p = Pipeline.create(
PipelineOptionsFactory.fromArgs(args).withValidation().create());
p.apply("ReadFromPubSub", PubsubIO.readMessages().fromSubscription("test"))
.apply("ConvertToKeyValuePair", ParDo.of(new ExtractFlowInfoFn()))
.apply("WriteToLog", ));
};
Run Code Online (Sandbox Code Playgroud)
我通过以下几个例子来提出代码.说实话,我不知道我在这做什么.
请帮助我理解这一点或将我链接到正确的文档.
假装我有模式
CREATE TABLE Account (
AccountId BYTES(MAX),
Foo STRING(1024)
) PRIMARY KEY (AccountId);"
CREATE TABLE Customer (
CustomerId BYTES(MAX),
Bar STRING(1024)
) PRIMARY KEY (CustomerId);"
Run Code Online (Sandbox Code Playgroud)
然后创建一个新表:
CREATE TABLE Order (
AccountId BYTES(MAX),
CustomerId BYTES(MAX),
Baz STRING(1024)
) PRIMARY KEY (AccountId, CustomerId);"
Run Code Online (Sandbox Code Playgroud)
我想INTERLEAVE与Account 和 在一起Customer。一个人怎么能做到呢?INTERLEAVE在构建层次结构时,我熟悉如何使用一个表,但是不确定如何使用两个表来实现这一点。
是否可以发出类似的东西
RENAME COLUMN col1 col2
Run Code Online (Sandbox Code Playgroud)
在 Google Cloud Spanner 中?从 DDL 来看这是不可能的;如果不是,这是 Beta 版的设计选择还是限制?
database database-schema google-cloud-platform google-cloud-spanner
我们可以在Google Spaner DB中使用地理空间查询吗?如果不是,是否还有其他方法可以通过在应用程序服务器中移动空间计算来在SQL中使用空间查询?
自8个月以来,我们在Google Cloud Spanner中运行一小部分生产数据,用于测试和学习有关Cloud Spanner的信息.
粗糙的特点:
我们首先注意到的是夜间CPU利用率与我们生产的负载没有直接对应.我认为这是一种像Cassandra那样的重组任务.所以没想到......
一周前,事情开始发生变化,CPU利用率也在上升.存储大小开始缩小.这很有趣,因为我们只添加数据.(见图)
我在想什么:
有没有人知道这可能背后的信息?
我正在尝试使用Node.js中的Cloud Spanner lib向我的扳手查询中动态添加LIMIT和ORDER BY子句:
function getPosts (query) {
const { limit, start, sortBy, sortOrder } = query;
delete query.start;
delete query.limit;
delete query.sortBy;
delete query.sortOrder;
const meta = {};
let limitClause = '';
let sortClause = '';
if (limit) {
limitClause = `
LIMIT @limit
OFFSET @start
`;
meta.limit = limit && parseInt(queryObj.limit, 10);
meta.start = start ? parseInt(start, 10) : 0;
}
if (sortBy) {
sortClause = `ORDER BY @sortBy ${(sortOrder && sortOrder.match(/^desc/i)) ? 'DESC' …Run Code Online (Sandbox Code Playgroud) 我正在评估一个项目的一些不同的数据存储,并且我有一个奇怪但不灵活的要求来检查每个查询是否存在 1500 个键...基本上我要运行的唯一查询的形式是:
SELECT user_id, name, gender
WHERE user_id in (user1, user2, ..., user1500)
Run Code Online (Sandbox Code Playgroud)
表中大约有 35 亿行。Spanner 是一个引起我注意的数据存储。我想知道以这种方式查询数据是否可行,或者是否会由于子句中的项目数量过多而遇到性能问题WHERE。到目前为止,我只能在少量数据上测试这些查询,因此我更倾向于理论性能影响,而不是仅仅“尝试并发现”。
另外,是否有其他数据存储可能更适合这种读取模式?我预计每秒运行的查询不超过 80 个。此外,数据将每周批量加载。数据本质上是结构化的,但我们不以关系方式使用它(即没有连接)。
无论如何,如果这个问题有任何含糊之处,我们很抱歉。如果需要,我很乐意提供更多详细信息。
我正在阅读 Google 扳手https://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf的论文, 我不清楚的一件事是实施的选择两阶段提交和Paxos。论文指出,当一个事务涉及多个Paxos组时,使用两阶段提交来完成事务。我的问题是为什么不在这些 Paxos 组上实施两阶段提交而不是实施 Paxos?
Google Spanner DDL 脚本在 Spanner 控制台中提交时成功运行,但当使用“--ddl-file”参数通过“glcoud spannerdatabasesddl update”命令执行时,它始终失败并出现错误:
(gcloud.spanner.databases.ddl.update)INVALID_ARGUMENT:解析 Spanner DDL 语句时出错:\n:第 1 行第 1 列出现语法错误:解析时遇到“EOF”:ddl_statement
命令示例:
gcloud spanner 数据库 ddl 更新 test-db
--instance=test-instance
--ddl-file=table.ddl
猫表.ddl
创建表区域 (region_id STRING(2) NOT NULL, name STRING(13) NOT NULL,) PRIMARY KEY (region_id);
互联网上只有另一处提及这一相同情况。有没有人得到“ddl-file”参数来成功工作?