Nano Hash - криптовалюты, майнинг, программирование

Oracle SQL sqlldr не импортирует правильно

SQL> desc FLIGHTS;
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 FLNO                                               NUMBER(38)
 FROM                                               VARCHAR2(64)
 TO                                                 VARCHAR2(64)
 DISTANCE                                           NUMBER(38)
 DEPARTS                                            DATE
 ARRIVES                                            DATE
 PRICE                                              FLOAT(63)

файл данных:

99,Los Angeles,Washington D.C.,2308,2005/04/12 09:30,2005/04/12 21:40,235.98
13,Los Angeles,Chicago,1749,2005/04/12 08:45,2005/04/12 20:45,220.98
346,Los Angeles,Dallas,1251,2005/04/12 11:50,2005/04/12 19:05,225.43
387,Los Angeles,Boston,2606,2005/04/12 07:03,2005/04/12 17:03,261.56

и управляющий файл sqlldr:

LOAD DATA INFILE 'flights.txt' 
 INTO TABLE Flights 
  FIELDS TERMINATED BY "," 
  ( FLNO
  , FROM
  , TO
  , DISTANCE
  , DEPARTS
  , ARRIVES
  , PRICE)

Выдержка из журнала ошибок:

Table FLIGHTS, loaded from every logical record.
Insert option in effect for this table: INSERT

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
FLNO                                FIRST     *   ,       CHARACTER            
FROM                                 NEXT     *   ,       CHARACTER            
TO                                   NEXT     *   ,       CHARACTER            
DISTANCE                             NEXT     *   ,       CHARACTER            
DEPARTS                              NEXT     *   ,       CHARACTER            
ARRIVES                              NEXT     *   ,       CHARACTER            
PRICE                                NEXT     *   ,       CHARACTER            

Record 1: Rejected - Error on table FLIGHTS, column FROM.
ORA-01747: invalid user.table.column, table.column, or column specification

Я не уверен, что не так с моим SQL, но предполагаю, что это из-за записи FROM?

24.03.2012

Ответы:


1

Во-первых, вызывать столбцы from и to - плохая идея, это ключевые слова. Что-нибудь вроде origin и destination может быть лучше ...

Во-вторых, float, это действительно не нужно. Шансы, что вам понадобится цена с точностью до 63 знаков после запятой, мала. Что-то вроде number(18,2) должно быть более чем достаточно (смешно на самом деле), но если вы хотите абсолютного максимума, используйте number(38,2).

Мой последний пункт перед ответом - это ваш файл данных. Если возможно, попросите вашего поставщика изменить это. Файл с разделителями-запятыми вызывает проблемы ... слишком много способов поместить запятую в данные. Если вы можете сделать это | или ¬ с разделителями, это лучше, поскольку они почти никогда не используются в тексте.

В зависимости от вашего NLS_PARAMETERS нет гарантии, что дата в файле будет изменена на дату, которая вам нужна в вашей таблице. Лучше явно указать это при входе в базу данных следующим образом:

LOAD DATA 
 INFILE 'flights.txt' 
 INTO TABLE Flights 
  FIELDS TERMINATED BY "," 
  ( FLNO
  , FROM
  , TO
  , DISTANCE
  , DEPARTS "to_date(:departs,'yyyy/mm/dd hh24:mi')"
  , ARRIVES "to_date(:arrives,'yyyy/mm/dd hh24:mi')"
  , PRICE DECIMAL EXTERNAL
    )

Обратите внимание, что я также изменил PRICE на десятичное число, если вы посмотрите в файл журнала, все предположительно является символом, что означает, что вы выполняете неявное преобразование, которое не может быть гарантировано.

Почему вы получили конкретное сообщение об ошибке? На самом деле я не знаю. Я также подозреваю, что это потому, что у вас есть столбец с именем FROM. Согласно документации по контрольному файлу, загрузчика SQL * нет ключевое слово from, поэтому я могу только утверждать, что это некоторая проблема со связью SQL * Loader с Oracle.

Вот еще один полезный ресурс по синтаксису.

24.03.2012
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..