小编Thi*_*ijs的帖子

在美国位置未找到数据集

我正在对一小组数据测试一些管道,然后在一次测试运行期间我的管道突然崩溃并显示以下消息: Not found: Dataset thijs-dev:nlthijs_ba was not found in location US

  • 我从未运行、部署或使用过任何美国资源。
  • 区域、区域和部署均基于欧盟。
  • 管道部署到欧盟,它显示在在欧盟运行的 UI 中。
  • 当我检查日志时,我看到 resouce.labels.region 'europe-west4'。
  • 我使用相同的部署脚本运行 40 多个管道,从未使用任何美国设置。
  • BQ 中所有表的所有数据位置都在 EU。
  • 使用 DirectRunner 时,日志显示: INFO:root:Using location 'EU' from table
  • 我在查询中使用没有项目名称的表引用,因为我们在不同的项目中有测试/验收等。这工作正常。当我添加项目时,错误仍然存​​在。

我的运行脚本
python pippeline/main.py --project thijs-dev --region europe-west4 --runner DataflowRunner --temp_location gs://thijs/dataflow/tmp --staging_location gs://thijs/dataflow/staging --job_name thijspipe --save_main_session --setup_file pipeline/setup.py --autoscaling_algorithm=THROUGHPUT_BASED --max_num_workers=7

我失败的一步
thijs = (p | 'ReadTable thijs' >> beam.io.Read(beam.io.BigQuerySource(query=queries.load_code_table(), use_standard_sql=True)))

示例我的查询是什么样的

   #standardSQL
   select
     original.c1,
     original.c2,
     original.c3
   from `thijs.tablename` original
     inner join (
       select c1, max(c2) as …
Run Code Online (Sandbox Code Playgroud)

python google-cloud-dataflow apache-beam

5
推荐指数
1
解决办法
2065
查看次数

打印subprocess.call结果

我试图用"Temp:"作为前缀在一个字符串中返回我的驱动器的温度.为此,我运行一个简单的脚本,用于将字符串与命令的输出连接起来.

import subprocess

command = "sudo smartctl -A /dev/sda | egrep Temperature_Celsius | awk '{print $10}'"

print "Temp " + str(subprocess.call(command, shell=True))
Run Code Online (Sandbox Code Playgroud)


结果:

29
Temp 0
Run Code Online (Sandbox Code Playgroud)


当我删除'print'行时,'29'也没有显示.因此,当我使用print语句时,脚本由于某种原因(?!)返回'29'然后返回0,而29实际上是正确的值.

我希望我能得到这个:

Temp: 29
Run Code Online (Sandbox Code Playgroud)

我试图使用os.system,并给出相同的结果.我也尝试将命令直接添加到"command = str(subprocess.call("但它给出了相同的结果.我已经阅读了os.system info页面和subprocess.call信息页面,我没有找到然后我用谷歌搜索AWK命令,也许它创建了一些疯狂的输出,但我找不到任何有用的东西.

Linux 2.7上的Python 2.7.0-34-通用#49-Ubuntu SMP Tue 11月12日18:00:10 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

python subprocess python-2.7

4
推荐指数
1
解决办法
3219
查看次数

系统未运行以使用完全限定的主机名

相关:

我想使用 CouchDB 2.0.0 设置一个集群,但首先我需要一个运行良好的主机。我尝试了许多主机名配置,但它们总是导致:

** System NOT running to use fully qualified hostnames **
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的,每次尝试后都完全重新安装并重新启动。

-sname couchdb@thiscomputer.local
-sname couchdb@thiscomputer
-sname couchdb@192.168.178.59
-sname thiscomputer

-name couchdb@thiscomputer.local
-name couchdb@thiscomputer
-name couchdb@192.168.178.59
-name thiscomputer    
Run Code Online (Sandbox Code Playgroud)

这些都失败了。那么也许我在服务器配置中做错了什么?

主机名

pi@thiscomputer:~ $ sudo cat /etc/hostname 
thiscomputer
Run Code Online (Sandbox Code Playgroud)

主机

pi@thiscomputer:~ $ sudo cat /etc/hosts
127.0.0.1   thiscomputer    thiscomputer.local
::1         localhost ip6-localhost ip6-loopback
ff02::1     ip6-allnodes
ff02::2     ip6-allrouters

127.0.1.1   localhost
Run Code Online (Sandbox Code Playgroud)

couchdb

4
推荐指数
1
解决办法
5922
查看次数

监控 WriteToBigQuery

在我的管道中,我使用 WriteToBigQuery 是这样的:

| beam.io.WriteToBigQuery(
     'thijs:thijsset.thijstable',
      schema=table_schema,
      write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND,
      create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED)
Run Code Online (Sandbox Code Playgroud)

这将返回文档中描述的 Dict,如下所示:

beam.io.WriteToBigQuery PTransform 返回一个字典,其 BigQueryWriteFn.FAILED_ROWS 条目包含所有未能写入的行的 PCollection。

如何打印此 dict 并将其转换为 pcollection 或如何仅打印 FAILED_ROWS?

如果我做: | "print" >> beam.Map(print)

然后我得到: AttributeError: 'dict' object has no attribute 'pipeline'

我一定读过一百个管道,但在 WriteToBigQuery 之后我再也没有看到任何东西。

[编辑] 当我完成管道并将结果存储在一个变量中时,我有以下内容:

{'FailedRows': <PCollection[WriteToBigQuery/StreamInsertRows/ParDo(BigQueryWriteFn).FailedRows] at 0x7f0e0cdcfed0>}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在管道中使用这个结果,如下所示:

| beam.io.WriteToBigQuery(
     'thijs:thijsset.thijstable',
      schema=table_schema,
      write_disposition=beam.io.BigQueryDisposition.WRITE_APPEND,
      create_disposition=beam.io.BigQueryDisposition.CREATE_IF_NEEDED)
| ['FailedRows'] from previous step
| "print" >> beam.Map(print)
Run Code Online (Sandbox Code Playgroud)

python-3.x google-bigquery google-cloud-dataflow apache-beam

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

dateTime范围查询

在我的ML8数据库中,有一些包含Dtm字段的JSON文档.您可以在下面的"数据:"中看到一个示例.我在这个字段上有一个标量类型dateTime的元素范围索引,并检查它是否有效我使用下面在'Test:'中看到的查询.结果如预期.

现在当我尝试查询这个时,我想要在某个日期之后使用Dtm字段获取所有文档,此查询不返回任何内容.您可以在"查询:"中查看下面的查询.

数据:

"Dtm": "2015-06-25T07:11:10.0Z"
Run Code Online (Sandbox Code Playgroud)

查询:

var date = xs.dateTime("2015-06-01T14:38:09.145231+02:00");
var b    = cts.elementRangeQuery("Dtm", ">", date);
var c    = cts.search(b);
c
Run Code Online (Sandbox Code Playgroud)

测试:

cts.elementValues([xs.QName("Dtm")], null, ['limit=3'], null, 1.0, null);
Run Code Online (Sandbox Code Playgroud)

测试结果:

2015-06-11T17:43:36
2015-06-11T17:43:37
2015-06-11T17:43:38
Run Code Online (Sandbox Code Playgroud)

javascript marklogic

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

删除多个文件

以下代码正在运行但速度极慢.直到搜索功能一切顺利.首先,搜索函数返回一个序列而不是一个数组(为什么?!).其次,数组由节点组成,我需要URI来删除.第三,deleteDocument函数接受一个字符串而不是URI的数组.

有什么更好的方法呢?我需要删除年份+旧文档.

在这里我使用xdmp.log而不是document.delete只是安全.

var now      = new Date();
var yearBack = now.setDate(now.getDate() - 365); 

var date = new Date(yearBack);
var b    = cts.jsonPropertyRangeQuery("Dtm", "<", date);
var c    = cts.search(b, ['unfiltered']).toArray();

for (i=0; i<fn.count(c); i++) {
  xdmp.log(fn.documentUri(c[i]), "info");
};
Run Code Online (Sandbox Code Playgroud)

javascript marklogic

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

为 WritetoFiles 设置文件名

我的流程将文件存储在磁盘上,我需要设置文件名,以便我可以找回东西。

默认命名是窗口时间戳和计数器,这对我没有帮助。文档对我来说不够清楚。(https://beam.apache.org/releases/pydoc/2.16.0/apache_beam.io.fileio.html?highlight=default_file_naming

fileio.WriteToFiles(archive_storage, file_naming=beam.io.fileio.destination_prefix_naming())
Run Code Online (Sandbox Code Playgroud)

我想命名文件<HASH>.json中的 HASH 是文件中数据的文件。

python-3.x google-cloud-dataflow apache-beam

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

实例未绑定到会话

就像许多其他人一样,我遇到了实例未绑定到会话的问题。我已经阅读了 SQLAlchemy 文档和这里的前 10 个问题。不幸的是,我还没有找到对我的错误的解释或解决方案。

我的猜测是 commit() 关闭会话,呈现对象未绑定。这是否意味着需要创建两个对象,一个用于 SQL Alchemy,另一个用于我的其余代码?

我创建一个像这样的对象:

class Mod(Base):
    __tablename__ = 'mod'
    insert_timestamp = Column(DateTime, default=datetime.datetime.now())
    name = Column(String, nullable=False)
Run Code Online (Sandbox Code Playgroud)

然后我使用此函数将其添加到数据库中,之后该对象就没用了,我无法再用它做任何事情,总是收到它未绑定到会话的错误。我尝试保持会话打开、关闭、复制对象、打开两个会话、返回对象、返回对象的副本。

def add(self, dataobjects: list[Base]) -> bool:
    s = self.sessionmaker()
    try:
        s.add_all(dataobjects)
    except TypeError:
        s.rollback()
        raise
    else:
        s.commit()
        return True
Run Code Online (Sandbox Code Playgroud)

这是我的会话设置:

    self.engine = create_engine(f"sqlite:///{self.config.database['file']}")
    self.sessionmaker = sessionmaker(bind=self.engine)
    Base.metadata.bind = self.engine
Run Code Online (Sandbox Code Playgroud)

我的最后一招是为每个对象创建两次,一次用于 SQL Alchemy,一次这样我可以在代码中实际使用该对象。这违背了 SQL Alchemy 对我的目的。

python sqlalchemy

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