1

こんにちは、テーブル ストレージ アカウントからデータをクエリする Python スクリプトを実行して、Azure ML アルゴリズムを開始しようとしています。私はこれを使用してそれを行います:

entities_Azure=table_session.query_entities(table_name=table_name, 
                                                filter="PartitionKey eq '" + partitionKey + "'",
                                                select='PartitionKey,RowKey,Timestamp,value',
                                                next_partition_key = next_pk,
                                                next_row_key = next_rk, top=1000)  

このコードが含まれる関数を呼び出すときに必要な変数を渡し、Azure ML に zip ファイルを含めることで関数を含めます。

エラーは、クエリに時間がかかりすぎるなどの理由によるものだと思いますが、大量のデータをクエリする必要がある可能性があるため、長い時間がかかる必要があります....私はこのSO post Windows Azure Storage Table connectionを見ましたこれは、これらのクエリの指定されたしきい値に達することに関して私が考える同様の問題ですが、どうすればそれを回避できるかわかりません。プログラムの実行時間は、タイムアウトするまでわずか約 1.5 分です。

なぜこれが起こっているのか、どうすれば解決できるのかについてのアイデアはありますか?

編集:

Peter Pan - MSFTのアドバイスに従って、より具体的なクエリを実行しました。

entities_Azure=table_service.query_entities(table_name='#######',select='PartitionKey,RowKey,Timestamp,value', next_partition_key = None, next_row_key = None, top=2)

これにより、次のエラー ログが返されました。

Error 0085: The following error occurred during script evaluation, please view the output log for more information:  
---------- Start of error message from Python interpreter ----------  
data:text/plain,Caught exception while executing function: Traceback (most recent call last):    

File "C:\server\invokepy.py", line 169, in 
batch odfs = mod.azureml_main(*idfs)    

File "C:\temp\azuremod.py", line 61, in 
azureml_main entities_Azure=table_service.query_entities(table_name='######',select='PartitionKey,RowKey,Timestamp,value', next_partition_key = None, next_row_key = None, top=2)    

File "./Script Bundle\azure\storage\table\tableservice.py", line 421, in query_entities
 response = self._perform_request(request)    

File "./Script Bundle\azure\storage\storageclient.py", line 171, in _perform_request
 resp = self._filter(request)    

File "./Script Bundle\azure\storage\table\tableservice.py", line 664, in _perform_request_worker
 return self._httpclient.perform_request(request)    

File "./Script Bundle\azure\storage\_http\httpclient.py", line 181, in perform_request
 self.send_request_body(connection, request.body)    

File "./Script Bundle\azure\storage\_http\httpclient.py", line 145, in send_request_body
 connection.send(None)    

File "./Script Bundle\azure\storage\_http\requestsclient.py", line 81, in send
 self.response = self.session.request(self.method, self.uri, data=request_body, headers=self.headers, timeout=self.timeout)    

File "C:\pyhome\lib\site-packages\requests\sessions.py", line 456, in request
 resp = self.send(prep, **send_kwargs)    

File "C:\pyhome\lib\site-packages\requests\sessions.py", line 559, in send
 r = adapter.send(request, **kwargs)    

File "C:\pyhome\lib\site-packages\requests\adapters.py", line 382, in send
 raise SSLError(e, request=request) 

SSLError: The write operation timed out    
---------- End of error message from Python  interpreter 
---------- Start time: UTC 11/18/2015 11:39:32 End time: UTC 11/18/2015 11:40:53

うまくいけば、これは状況へのより多くの洞察をもたらします!

4

2 に答える 2

1

自分で生成したデータでテーブル ストレージを埋めようとしましたが、あなたのようなクエリを実行して問題を再現したいのですが、失敗しました。

REST API (Python でラップされた REST API 用の Azure Storage SDK) のテーブル ストレージ クエリ タイムアウトの問題が見つかりました。ページ ( https://msdn.microsoft.com/en-us/library/azure/dd894042.aspx ) テーブル サービス REST API の「クエリ タイムアウトとページネーション」には、次のように記載されています。

テーブル サービスに対するクエリは、一度に最大 1,000 項目を返すことができ、最大 5 秒間実行できます。結果セットに 1,000 を超えるアイテムが含まれている場合、クエリが 5 秒以内に完了しなかった場合、またはクエリがパーティションの境界を越えた場合、応答には、開発者がクエリを再開するために使用する継続トークンを提供するヘッダーが含まれます。結果セットの次のアイテム。Query Tables 操作または Query Entities 操作に対して、継続トークン ヘッダーが返される場合があります。

クエリのスケジューリングと処理のためにリクエストに割り当てられた合計時間は、クエリ実行の 5 秒を含めて 30 秒であることに注意してください。

クエリで結果が返されなくても、継続ヘッダーが返される可能性があります。

これらの指定されたしきい値に達したことが問題の原因だと思います。

また、モジュールを使用しReaderData Input and Outputデータ ソースを設定しAzure Table、Azure ML Studio の実験で 1000 個のエンティティを正常かつ高速に読み取ることができました。

ここに画像の説明を入力

ここに画像の説明を入力

このシナリオでは、次のように、指定されたクエリ フィルターを使用してテーブル ストレージにクエリを実行することをお勧めします。

entities_Azure=table_session.query_entities(table_name=table_name,
      filter="PartitionKey eq '" + partitionKey + "' and Rowkey eq '" + rowkey + "'",
      select='PartitionKey,RowKey,Timestamp,value',
      next_partition_key = next_pk,
      next_row_key = next_rk, top=1000) 

このコードを使用して、接続の問題かしきい値の問題かを判断できます。

ご不明な点がございましたら、お気軽にお問い合わせください。

于 2015-11-18T07:39:58.297 に答える
0

Azure ML 実験内から Azure ブログ ストレージにアクセスする で、非常によく似た問題に遭遇しました。最初に投稿したときは似ていることに気づきませんでした。しかし、デバッグとヘルプが続くにつれて、それは非常に明確になりました。

結論:azure.storage.* HTTPS/SSL 経由でアクセスすると、タイムアウト付きの SSLError が発生します。「TableService」の作成を変更して HTTP ( protocol='http') の使用を強制すると、タイムアウト エラーは発生しなくなります。

table_service = TableService(account_name='myaccount', account_key='mykey',protocol='http')

完全な分析は、上記の StackOverflow の投稿で見つけることができます。しかし、私はこれを見て、検索を支援するためにここで直接言及する必要があると感じました. この修正は、azure.storage.table、a​​zure.storage.blob、azure.storage.page、および azure.storage.queue に適用されます。

PS。はい、HTTP の使用が最適ではないことは承知していますが、すべてを Azure 内で実行しています。また、Azure ML (または Azure App Service) を離れるときは、HTTPS に戻すことができます。

于 2016-02-11T16:17:22.940 に答える