2017-10-12 1 views
1

아래 코드를 사용하여 타임 스탬프가있는 Google Spanner 테이블에서 읽으려고합니다. , 종료 RPC의 < _Rendezvous (StatusCode.DEADLINE_EXCEEDED :스패너가 타임 스탬프로 읽지 못했습니다.

grpc._channel._Rendezvous : 나는 "스냅 샷"호출에 타임 스탬프를 설정하면

import datetime as dt 
from google.cloud.spanner.client import Client 

proj = 'my_project' 
inst = 'my_instance' 
db = 'my_database' 

datetime_now = dt.datetime.now() 
with Client(proj).instance(inst).database(db).snapshot(read_timestamp=datetime_now) as snapshot: # this fails 
#with Client(proj).instance(inst).database(db).snapshot() as snapshot: # this works 
    result = snapshot.execute_sql('some SQL query') 
    for row in result: 
     print row 

,이 오류 메시지가 아래에 반환 마감일을 초과했습니다.)>

그러나 "[...]. snapshot()"을 호출하면 테이블이 올바르게 읽혀집니다.

내 스크립트 또는 설치 문제로이 오류가 있습니까?

편집 : 그냥 파이썬 스패너 API의 최신 버전 아니 었 주목. 0.26에서 0.28로 업데이트 한 후에는 오류를 제기하기보다는 스크립트가 아무 것도 반환하지 않고 영원히 계속된다는 것을 제외하고는 똑같은 일이 발생합니다.

답변

1

몇 가지 조사 후, 상기 용액 (경우 다른 사람의 유사한 문제로 실행) :

datetime_now = dt.datetime.now()는 (로컬로 실행시) 현재 시스템 시간을 반환합니다. 나중에 데이터베이스 시간 (UTC)과 비교하면 읽기가 실패하거나 중단됩니다. datetime_now = dt.datetime.utcnow() 을 사용하면 스크립트가 클라우드에서 실행될 경우에는 필요하지 않지만이 문제는 해결됩니다.

+1

시계 동기화가 어렵습니다. 'read_timestamp' 대신에'max_staleness'를 사용할 것을 권합니다. 자세한 내용은 여기를 클릭하십시오. https://googlecloudplatform.github.io/google-cloud-python/stable/spanner/database-api.html#google.cloud.spanner.database.Database.snapshot –

+0

감사합니다. . –

관련 문제