2011-08-25 16 views
5

Tôi có tệp phẳng được nhập vào SQL Server qua gói SSIS hiện có. Tôi cần thực hiện thay đổi đối với gói để chứa một trường mới trong tệp phẳng. Trường mới là trường ngày có định dạng dd-mmm-yy (ví dụ: 25-AUG-11). Trường ngày trong tệp phẳng sẽ trống (ví dụ: khoảng trắng/khoảng trắng) hoặc được điền ngày tháng. Tôi không có quyền kiểm soát định dạng ngày trong tệp phẳng.Làm cách nào để định dạng giá trị dd-mmm-yy trong tệp phẳng thành smalldatetime trong khi nhập dữ liệu?

Tôi cần nhập trường ngày trong tệp phẳng vào bảng SQL Server hiện tại và loại dữ liệu trường đích là smalldatetime.

Tôi đã đề xuất nhập ngày làm chuỗi vào bảng tải và sau đó chuyển đổi thành smalldatetime khi lấy dữ liệu từ bảng tải. Nhưng có cách nào khác có thể phân tích cú pháp định dạng ngày dd-mmm-yy để tải trực tiếp trường này vào trường có thời gian nhỏ mà không phải sử dụng chuyển đổi thành smalldatetime từ bảng tải. Tôi hoàn toàn không thể nghĩ cách phân tích cú pháp định dạng ngày, đặc biệt là tháng. Mọi đề xuất đều được chào đón.

Trả lời

7

Dưới đây là ví dụ có thể cung cấp cho bạn ý tưởng về những việc bạn có thể làm. Lý tưởng nhất là, trong một gói SSIS hoặc trong bất kỳ công việc ETL nào, bạn nên tính đến dữ liệu đó có thể không chính xác như những gì bạn muốn. Bạn cần phải thực hiện các bước thích hợp để xử lý dữ liệu không chính xác hoặc không hợp lệ có thể bật lên ngay bây giờ. Đó là lý do tại sao SSIS đưa ra rất nhiều nhiệm vụ Chuyển đổi trong Công cụ lưu lượng dữ liệu mà bạn có thể sử dụng để dọn sạch dữ liệu.

Trong trường hợp của bạn, bạn có thể sử dụng chuyển đổi Derived Column hoặc Data conversion để đạt được các yêu cầu của mình.

Ví dụ được tạo trong SSIS 2008 R2. Nó cho thấy cách đọc một tệp phẳng chứa các ngày tháng và tải vào một bảng SQL.

File

Tôi tạo ra một bảng SQL đơn giản để nhập dữ liệu tập tin phẳng.

Table

Trên gói SSIS, tôi có một người quản lý kết nối đến SQL và một cho tập tin phẳng. Kết nối tệp phẳng được cấu hình như hình dưới đây.

Connection

Flat file 1

Flat file 2

Flat file 3

Trên gói SSIS, tôi đặt một Data Flow công tác trên tab Flow Control. Bên trong, nhiệm vụ Dòng dữ liệu, tôi có Nguồn tệp phẳng, Chuyển đổi cột có nguồn gốc và Điểm đến OLE DB. Vì nguồn tập tin Phẳng và đích OLE DB rất đơn giản, tôi sẽ để chúng ở đây.Chuyển đổi có nguồn gốc tạo ra một cột mới với biểu thức (DT_DBDATE)SmallDate. Lưu ý rằng bạn cũng có thể sử dụng chuyển đổi Chuyển đổi dữ liệu để thực hiện tương tự. Cột mới này SmallDateTimeValue sẽ được ánh xạ tới cột cơ sở dữ liệu trong Đích đến OLE DB.

Derived column

Nếu bạn thực hiện gói thầu này, nó sẽ thất bại bởi vì không phải tất cả các giá trị trong các tập tin có giá trị.

Failed

Lý do tại sao nó không thành công trong trường hợp của bạn là vì dữ liệu không hợp lệ được chèn trực tiếp vào bảng. Trong trường hợp của bạn, bảng sẽ ném một ngoại lệ khiến cho gói bị lỗi. Trong ví dụ này, gói bị lỗi vì cài đặt mặc định trên biến đổi cột có nguồn gốc là không thành công nếu có bất kỳ lỗi nào. Vì vậy, hãy đặt một chuyển đổi giả để chuyển hướng các hàng lỗi. Chúng tôi sẽ chuyển đổi Multicast cho mục đích này. Nó sẽ không thực sự làm gì cả. Lý tưởng nhất, bạn nên chuyển hướng các hàng lỗi đến một bảng khác bằng cách sử dụng đích OLE DB hoặc thành phần đích khác do bạn chọn để bạn có thể phân tích dữ liệu gây ra lỗi.

Kéo mũi tên màu đỏ từ Chuyển đổi có nguồn gốc và kết nối nó với chuyển đổi Đa hướng. Thao tác này sẽ bật lên hộp thoại Định cấu hình lỗi. Thay đổi các giá trị dưới cột Lỗi và cắt ngắn từ Thành phần lỗi thành Redirect row. Điều này sẽ chuyển hướng bất kỳ hàng lỗi nào đến quá trình chuyển đổi Multicast và sẽ không nhận được vào các bảng.

Configure Error output

Bây giờ, nếu chúng tôi thực hiện gói, nó sẽ chạy thành công. Lưu ý số hàng được hiển thị theo mỗi hướng.

Success

Đây là những dữ liệu mà có vào bảng. Chỉ có 2 hàng là hợp lệ. Bạn có thể xem ảnh chụp màn hình đầu tiên cho thấy dữ liệu trong tệp và bạn chỉ có thể thấy 2 hàng là hợp lệ.

Hy vọng cung cấp cho bạn ý tưởng để triển khai yêu cầu của bạn trong gói SSIS.

Table data

+1

Ảnh chụp màn hình thật tuyệt vời, +1 – eddiegroves

3

Nó sẽ tải thẳng vào trường SMALLDATETIME như cũ. Hãy nhớ rằng, ngày tháng chỉ là số trong SQL Server, được trình bày cho người dùng theo định dạng ngày/giờ mong muốn. Gói SSIS nên đọc 25-AUG-2011 tốt như một kiểu dữ liệu ngày tháng và chèn nó vào một trường SMALLDATETIME mà không có vấn đề gì.

Gói có bị lỗi hay gì đó không?

+0

Các gói phần mềm đã được ném một lỗi chuyển đổi nhưng somone đã nói với tôi điều này có thể là do các hồ sơ đó là không gian/khoảng trắng vì vậy tôi cần phải làm một tấm séc cho họ và chèn một NULL (DT_DATE). – suggy1982

Các vấn đề liên quan