BigQuery добавление ненужных десятичных знаков к определенной строке - PullRequest
0 голосов
/ 05 апреля 2019

Я определил схему в BigQuery следующим образом:

+------------------+----------+----------+
|       name       |   type   |   mode   |
+------------------+----------+----------+
| warehouse        | INTEGER  | NULLABLE |
| transaction_date | DATETIME | NULLABLE |
| style            | STRING   | NULLABLE |
| piece            | STRING   | NULLABLE |
| fabric_1         | STRING   | NULLABLE |
| fabric_2         | STRING   | NULLABLE |
| serial           | STRING   | NULLABLE |
| customer_po      | STRING   | NULLABLE |
| order_number     | STRING   | NULLABLE |
+------------------+----------+----------+

Два поля, на которых я сосредоточился, - это serial и order_number, которые при предварительном просмотре в R выглядят так:

+-----------+------------------+--------+-------+-----------+----------+------------+--------------+--------------+
| warehouse | transaction_date | style  | piece | fabric_1  | fabric_2 |   serial   | customer_po  | order_number |
+-----------+------------------+--------+-------+-----------+----------+------------+--------------+--------------+
|        80 | 4/3/19           | K28300 | ARMH  | ALL CHAR  | NA       | 8040418253 | 1486838165   |       464374 |
|        80 | 4/3/19           | K28300 | ARMH  | ALL CHAR  | NA       | 9040542252 | 1485798731-P |       464069 |
|        80 | 4/3/19           | K28300 | ARMH  | ELEG NAVY | NA       | 8040355550 | 1486826068   |       464369 |
|        80 | 4/3/19           | K28300 | ARMH  | ELEG NAVY | NA       | 8040532364 | 1485366411-R |       464071 |
+-----------+------------------+--------+-------+-----------+----------+------------+--------------+--------------+

В R эти два поля выглядят как символы в кадре данных, который я загружаю, и это то, что я ищу.Тем не менее, когда я отправляю данные в BigQuery, эти два поля заканчиваются примерно так:

   +-----------+------------------+--------+-------+-----------+----------+------------+--------------+--------------+
    | warehouse | transaction_date | style  | piece | fabric_1  | fabric_2 |   serial   | customer_po  | order_number |
    +-----------+------------------+--------+-------+-----------+----------+------------+--------------+--------------+
    |        80 | 4/3/19           | K28300 | ARMH  | ALL CHAR  | NA       | 8040418253.0 | 1486838165   |       464374.0 |
    |        80 | 4/3/19           | K28300 | ARMH  | ALL CHAR  | NA       | 9040542252.0 | 1485798731-P |       464069.0 |
    |        80 | 4/3/19           | K28300 | ARMH  | ELEG NAVY | NA       | 8040355550.0 | 1486826068   |       464369.0 |
    |        80 | 4/3/19           | K28300 | ARMH  | ELEG NAVY | NA       | 8040532364.0 | 1485366411-R |       464071.0 |
    +-----------+------------------+--------+-------+-----------+----------+------------+--------------+--------------+

Почему это происходит и как я могу изменить это?Для справки, мой код для загрузки:

bqr_upload_data(projectId = "project-test", 
                datasetId = "orders", 
                tableId = "daily_orders", 
                upload_data = df_daily_orders,
                maxBadRecords = 1000,
                overwrite = TRUE)

Ответы [ 2 ]

1 голос
/ 06 апреля 2019

Загрузка из R просматривает класс столбца, чтобы решить, какая схема лучше всего подходит для BigQuery.Попробуйте изменить класс столбца фрейма данных на строку, чтобы он не превратился в float, поскольку то, что выглядит, происходит через что-то вроде

as.character(df$column)
1 голос
/ 05 апреля 2019

Теперь я не совсем уверен в своем ответе, так как я все еще новичок, но он может вам помочь. Я бы добавил это как комментарий, но у меня пока недостаточно репутации.

Если я правильно понял, вы на самом деле делаете неявное приведение - от числового значения к строковому значению, а BigQuery перехватывает десятичную точку, чтобы убедиться, что он правильно перехватывает целое значение

Отметьте здесь Правила преобразования BigQuery - вторая таблица, FLOAT64 в String.

На вашем месте и в зависимости от того, что вам нужно делать со столом - я бы:

  1. Создайте заново таблицу, но измените схему для столбцов serial и order_number на целочисленный тип

или

  1. Попробуйте обновить уже созданную таблицу с помощью запроса на обновление - и измените '.0' в конце каждого строкового значения
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...