Сопоставление столбца времени потоков данных со столбцом времени Sql

#azure-data-factory #azure-data-factory-2 #sqldatatypes #azure-data-flow

Вопрос:

База данных SQL server имеет тип данных столбца времени

[время начала] время РАВНО НУЛЮ, [время окончания] время РАВНО НУЛЮ,

но в потоках данных для этого нет функции. Единственный способ, который я могу придумать для этого, — это запрос post (если вы полностью воссоздадите таблицу).

   alter table dbo.[testTable] 
  alter column [start_time] time(0) 
  alter column [end_time] time(0) 
 

Я попытался использовать метку времени, но опять же это не соответствующий тип данных

Метка времени(подстрока(дата начала,12,9),’ЧЧ:мм:сс’)

так что это не сработает.

Любая помощь в понимании этого была бы отличной

** обновление с помощью снимков экранов, поэтому эта проблема относится к таблицам базы данных parquet или csv в Sql.

если у вас есть столбец, который выглядит как дата-время, вам нужно сохранить его в виде строки, так как функции ToDateTime нет, есть только отметка времени. Ни строка, ни метка времени не могут быть преобразованы в тип данных DateTime в приемнике SQLdb. В итоге в вашей колонке появятся нули

введите описание изображения здесь
введите описание изображения здесь
введите описание изображения здесь

Пример использования выражения для изменения даты начала на гггг-мм-дд ЧТ:мм:сс

Блок-цитата

Ответ №1:

Вы можете просто сопоставить столбец ДАТЫ и времени с целевым столбцом ВРЕМЕНИ в действии приемника.

введите описание изображения здесь

Убедитесь, что опция «Разрешить смещение схемы» в действии приемника снята.

Убедитесь, что опция quot;Разрешить смещение схемыquot; снята

Моя схема тестирования:

 -- source table
DROP TABLE IF EXISTS [dbo].[tempSourceTable]

CREATE TABLE [dbo].[tempSourceTable](
    [id] int IDENTITY(1,1) NOT NULL,
    [key] nvarchar(max) NULL,
    [start_date] datetime NULL
)

INSERT INTO [dbo].[tempSourceTable] VALUES ('key1', '2021-10-14 12:34:56')

SELECT * FROM [dbo].[tempSourceTable]

-- target table

DROP TABLE IF EXISTS [dbo].[tempTargetTable]

CREATE TABLE [dbo].[tempTargetTable](
    [id] int IDENTITY(1,1) NOT NULL,
    [key] nvarchar(max) NULL,
    [start_time] time NULL
)
 

результат после выполнения потока данных в конвейере:
введите описание изображения здесь
введите описание изображения здесь

Комментарии:

1. Привет, спасибо за быстрый ответ, и я вижу, что вы сделали здесь правильно. Работает ли это только с потоком данных от таблицы к таблице базы данных? Пример:- мой столбец start_date находится в строковом формате .csv ’04/10/2021 11:30:53′ вы не можете просто установить его на дату, так как он будет усечен до даты и будет показывать значение null что-либо еще.

2. Было бы здорово, если бы вы могли предоставить образец CSV, чтобы мы могли глубже изучить его, чтобы понять, чем мы можем помочь 🙂

3. Выполнено. 🙂 Пожалуйста, посмотрите мой отредактированный пост. спасибо вам за вашу помощь. В идеале просто иметь столбец datetime в файле и загружать его в SQL DateTime-идеальный сценарий

4. Я добавил еще один ответ, используя ваш пример CSV в качестве входных данных. Если новый ответ-это то, что вы ищете, я удалю этот старый ответ и сохраню только новый. 🙂

Ответ №2:

Вот мой тестовый ввод CSV:

 start_date,end_date,start_date_time,end_date_time,start_time,end_time
09/01/2020,09/01/2020,09/01/2020 11:01,09/01/2020 11:01,11:01:46,11:01:52
09/01/2020,,09/01/2020 11:01,,11:01:47,
09/01/2020,09/01/2020,09/01/2020 11:01,09/01/2020 11:50,11:01:49,11:50:41
09/01/2020,09/01/2020,09/01/2020 11:01,09/01/2020 11:01,11:01:51,11:01:55
09/01/2020,09/01/2020,09/01/2020 11:01,09/01/2020 11:01,11:01:52,11:01:56
 

Вы можете указать формат данных/времени/даты-времени для исходных данных CSV:
введите описание изображения здесь

Вы можете увидеть правильный результат анализа в предварительном просмотре данных: введите описание изображения здесь

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

Схема таблицы приемника, которую я использовал для тестирования:

 CREATE TABLE [dbo].[tempTargetTable](
    [start_date] date NULL,
    [end_date] date NULL,
    [start_date_time] datetime NULL,
    [end_date_time] datetime NULL,
    [start_time] time NULL,
    [end_time] time NULL
)
 

Результат в БД:
введите описание изображения здесь