标签: google-cloud-spanner

在apache beam中使用SpannerIO时出错

这个问题是一个跟进到这一个.我正在尝试使用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: …

java google-cloud-dataflow apache-beam google-cloud-spanner

3
推荐指数
1
解决办法
900
查看次数

Google DataFlow Apache Beam

我试图使用Apache Beam创建一个Dataflow管道,我无法按照文档,找不到任何示例.

管道很简单.

  1. 创建一个管道
  2. 阅读pub/sub主题
  3. 写入扳手.

目前,我陷入了第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)

我通过以下几个例子来提出代码.说实话,我不知道我在这做什么.

请帮助我理解这一点或将我链接到正确的文档.

google-cloud-dataflow apache-beam google-cloud-spanner

3
推荐指数
1
解决办法
639
查看次数

一个如何与两个表交错?

假装我有模式

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)

我想INTERLEAVEAccount 在一起Customer。一个人怎么能做到呢?INTERLEAVE在构建层次结构时,我熟悉如何使用一个表,但是不确定如何使用两个表来实现这一点。

google-cloud-spanner

3
推荐指数
1
解决办法
68
查看次数

是否可以重命名列?

是否可以发出类似的东西

RENAME COLUMN col1 col2
Run Code Online (Sandbox Code Playgroud)

在 Google Cloud Spanner 中?从 DDL 来看这是不可能的;如果不是,这是 Beta 版的设计选择还是限制?

database database-schema google-cloud-platform google-cloud-spanner

2
推荐指数
1
解决办法
3336
查看次数

如何在Google扳手中使用空间查询

我们可以在Google Spaner DB中使用地理空间查询吗?如果不是,是否还有其他方法可以通过在应用程序服务器中移动空间计算来在SQL中使用空间查询?

sql geospatial google-cloud-platform google-cloud-spanner

2
推荐指数
1
解决办法
838
查看次数

Cloud Spanner:意外的CPU利用率

自8个月以来,我们在Google Cloud Spanner中运行一小部分生产数据,用于测试和学习有关Cloud Spanner的信息.

粗糙的特点:

  • 1个表,40亿行,大约600GB存储大小,每天添加25条线,没有从表中删除.
  • 我们用低读取和简单读取来编写大量数据.
  • 每天写入的数据量不断增加,但不是很多
  • 节点数:1(这不建议用于生产,但对我来说有趣的是CPU利用率的相对变化 - 使用3个削减利用率不超过三分之一)
  • 我们确实有一些但不是很多非常大的分裂,可能会超过建议的分割大小'some GB',因为它们大约是20GB左右

我们首先注意到的是夜间CPU利用率与我们生产的负载没有直接对应.我认为这是一种像Cassandra那样的重组任务.所以没想到......

一周前,事情开始发生变化,CPU利用率也在上升.存储大小开始缩小.这很有趣,因为我们只添加数据.(见图)

CPU利用率 Load_Storage

我在想什么:

  • 也许一些新版本的云扳手会引发一些全球性的重组
  • 我们的大分裂会在重组过程中产生问题

有没有人知道这可能背后的信息?

google-cloud-platform google-cloud-spanner

2
推荐指数
1
解决办法
434
查看次数

在Node.js中使用Cloud Spanner进行插值查询

我正在尝试使用Node.js中的Cloud Spanner lib向我的扳手查询中动态添加LIMITORDER 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)

node.js google-cloud-platform google-cloud-spanner

2
推荐指数
1
解决办法
66
查看次数

Cloud Spanner - WHERE 子句中大量项目的读取性能

我正在评估一个项目的一些不同的数据存储,并且我有一个奇怪但不灵活的要求来检查每个查询是否存在 1500 个键...基本上我要运行的唯一查询的形式是:

SELECT user_id, name, gender
WHERE user_id in (user1, user2, ..., user1500)
Run Code Online (Sandbox Code Playgroud)

表中大约有 35 亿行。Spanner 是一个引起我注意的数据存储。我想知道以这种方式查询数据是否可行,或者是否会由于子句中的项目数量过多而遇到性能问题WHERE。到目前为止,我只能在少量数据上测试这些查询,因此我更倾向于理论性能影响,而不是仅仅“尝试并发现”。

另外,是否有其他数据存储可能更适合这种读取模式?我预计每秒运行的查询不超过 80 个。此外,数据将每周批量加载。数据本质上是结构化的,但我们不以关系方式使用它(即没有连接)。

无论如何,如果这个问题有任何含糊之处,我们很抱歉。如果需要,我很乐意提供更多详细信息。

google-cloud-platform google-cloud-spanner

2
推荐指数
1
解决办法
919
查看次数

为什么谷歌扳手同时使用两阶段提交和paxos?

我正在阅读 Google 扳手https://static.googleusercontent.com/media/research.google.com/en//archive/spanner-osdi2012.pdf的论文, 我不清楚的一件事是实施的选择两阶段提交和Paxos。论文指出,当一个事务涉及多个Paxos组时,使用两阶段提交来完成事务。我的问题是为什么不在这些 Paxos 组上实施两阶段提交而不是实施 Paxos?

google-cloud-spanner

2
推荐指数
2
解决办法
1493
查看次数

无法使用“gcloud spanner Databases ddl update”命令执行 Spanner DDL 脚本

Google Spanner DDL 脚本在 Spanner 控制台中提交时成功运行,但当使用“--ddl-file”参数通过“glcoud spannerdatabasesddl update”命令执行时,它始终失败并出现错误:

(gcloud.spanner.databases.ddl.update)INVALID_ARGUMENT:解析 Spanner DDL 语句时出错:\n:第 1 行第 1 列出现语法错误:解析时遇到“EOF”:ddl_statement

  • '@type': type.googleapis.com/google.rpc.LocalizedMessage 区域设置: en-US 消息: |- 解析 Spanner DDL 语句时出错: : 第 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”参数来成功工作?

google-cloud-spanner

2
推荐指数
1
解决办法
2557
查看次数