Я получаю случайные сбои в API-интерфейсе Big Query при отправке ему некоторого SQL-кода для извлечения данных через REST API.
Я использую точку REST
https://www.googleapis.com/bigquery/v2/projects/${project}/queries
Иногда я получаю результаты, а иногда нет.
Я обнаружил аналогичную проблему в Интернете, где ошибка была вызвана тем, что для параметра location по умолчанию задано значение «US», поэтому я попытался «EU» инесколько моих запросов работали, но некоторые все еще не удавались.Выполнение запросов занимает некоторое время, (5 минут).
Я могу запустить его нормально в консоли.
Любая помощь в поиске будет очень признательна
Полученная ошибка выглядит следующим образом (PS: я не создал этот идентификатор задания, возвращенный с ошибкой
Query failed: <!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 404 (Not Found)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
</style>
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
<p><b>404.</b> <ins>That’s an error.</ins>
<p>The requested URL <code>/bigquery/v2/projects/$project/queries/job_F6t2Lvufj01Eo1PyuUZuyUiIUwZA</code> was not found on this server. <ins>That’s all we know.</ins>
Я пробовал без указания местоположения, а также изменил местоположение с США на ЕС безудачи. Я нахожусь в Великобритании, и набор данных, который я запрашиваю, имеет местоположение, установленное в US
. Ниже приведен код perl, который выполняет запрос.
подзапрос {
my ( $self, $sql, %params ) = @_;
my $url
= "https://www.googleapis.com/bigquery/v2/projects/$self->{project}/queries";
my $res
= %params
? $self->request( $url,
{ query => $sql, useLegacySql => \0, %params } )
: $self->request( $url, { query => $sql, useLegacySql => \0 } );
croak "Query failed: $res->{content}" unless $res->{success};
my $job_id = $res->{content}{jobReference}{jobId};
my $attempts;
# If the result set takes longer to build than the default BigQuery
# timeout (10 seconds), we need to poll an endpoint to gather the results.
# We attempt this up to n times before giving up.
until ( $res->{content}{jobComplete} ) {
$res
= %params
? $self->request( "$url/$job_id", \%params )
: $self->request("$url/$job_id");
croak "Query failed: $res->{content}" unless $res->{success};
croak 'Query failed: result set took too long to return'
if ++$attempts > MAX_ATTEMPTS;
}
my @fields = map $_->{name}, @{ $res->{content}{schema}{fields} };
sub {
my @rows;
for ( @{ delete $res->{content}{rows} // [] } ) {
push @rows, \my %row;
@row{@fields} = map $_->{v}, @{ $_->{f} };
}
if ( $res->{content}{pageToken} ) {
my $url = "$url/$job_id?";
$url .= HTTP::Tiny->www_form_urlencode(
{ pageToken => $res->{content}{pageToken} } );
$res
= %params
? $self->request( $url, \%params )
: $self->request($url);
croak "Query failed: $res->{content}" unless $res->{success};
}
@rows;
};
}
Я ожидаю, что строки, которые были извлечены, возвращаются, когда я запускаю один и тот же SQL-запрос в консоли, соответствующим образом возвращаются через API.
Фактический результат,иногда точка REST терпит неудачу с 404 идентификатором задания, не найденным