BigQuery случайно завершается с ошибкой / bigquery / v2 / projects / <project>/ запросы /> jobID-HEX 404 не найден - PullRequest
1 голос
/ 28 мая 2019

Я получаю случайные сбои в 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 идентификатором задания, не найденным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...