2009-06-05 34 views
9

Tôi có 5 large XML files mà tôi muốn phân tích. Tất cả chúng đều là quá lớn để mở trong trình soạn thảo văn bản và vì vậy tôi không biết lược đồ XML của chúng.Nhập dữ liệu XML vào máy chủ MS SQL theo chương trình

Tôi đã cố gắng nhập chúng vào máy chủ SQL, tuy nhiên quá trình này đã cho tôi lỗi mặc dù tôi khá chắc chắn rằng chúng hợp lệ, vì chúng được lấy từ rất lập trình viên có uy tín.

Tôi cũng đã thử các phương pháp khác nhưng mỗi cuộc đấu tranh với các kích thước lớn tập tin (MySQL) hoặc tiểu bang rằng các tập tin chứa các ký tự không hợp lệ XML (Tiếp cận & Excel).

Làm thế nào tôi có thể đọc và chèn dữ liệu theo chương trình? Điều này có thể được thực hiện thông qua truy vấn SQL không?

Cảm ơn rất nhiều!

+1

Bạn không thể tpye tệp ở bảng điều khiển và xem lược đồ của nó? http://en.wikipedia.org/wiki/List_of_DOS_commands#type –

+6

tệp xml khổng lồ không có lược đồ được ghi lại tài liệu! = các lập trình viên có uy tín –

+0

Tôi hiện đã đặt chế độ xem lược đồ tệp trên blog của mình. logicflip.com/2009/06/stackoverflow-download-data-schema Hy vọng nó sẽ giúp! http://www.jonwinstanley.com/2009/06/stackoverflow-download-data-schema/ –

Trả lời

1

Bạn phải biết lược đồ. Hãy thử tải xuống TextPad hoặc một cái gì đó tương tự để xem các tệp.

Một khi bạn biết lược đồ, bạn có thể thực hiện một vài điều để đưa chúng vào SQL. Một cách tiếp cận sẽ là sử dụng OpenXML http://msdn.microsoft.com/en-us/library/ms186918.aspx.

+0

Tôi đang sử dụng Notepad ++ rồi. Điều đó thường khá chắc chắn. Tuy nhiên, các tệp này khác nhau giữa 19mb và 850mb. Thật không may, một trong những tôi thực sự muốn xem là một trong những lớn. –

+1

Trình chỉnh sửa duy nhất tôi biết có thể xử lý các tệp lớn hơn kích thước RAM của bạn là UltraEdit (http://www.ultraedit.com/) –

+0

Tôi có rất nhiều RAM, 1.5gb (1.05 có sẵn). Nhưng dù sao thì hãy xem UltraEdit. Cảm ơn! –

4

Hãy thử các tiện ích LogParser miễn phí từ Microsoft: http://www.microsoft.com/DownLoads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en

Nó được thiết kế để cung cấp cho bạn SQL giống như truy cập vào tập tin văn bản lớn bao gồm XML. Một cái gì đó như

Select top 1000 * from myFile.xml 

... nên hoạt động để giúp bạn bắt đầu. Ngoài ra, hãy cẩn thận rằng tài liệu sẽ xuất hiện trong trình đơn bắt đầu của bạn dọc theo bên thực thi sau khi cài đặt - Tôi không nghĩ rằng có một bản sao tốt trên đường dây.

0

Để xem các tệp rất lớn, tôi đã tìm thấy V file viewer là tuyệt vời.

Tôi đã sử dụng nó trên các tệp lớn tới 8GB. Đối với các tệp có độ dài bản ghi cố định, rất dễ điều hướng dựa trên kích thước khối, vì nó dựa trên đĩa.

Lưu ý rằng không có khả năng chỉnh sửa. Đã nói rằng, một khó khăn với XML là nó không thực sự là một định dạng tốt cho "luồng lớn", vì nó có cấu trúc bắt đầu và kết thúc tổng thể, và trình phân tích cú pháp không thể giữ toàn bộ tệp trong bộ nhớ có thể phải làm một số thủ thuật khá lạ mắt để đảm bảo rằng nó tuân thủ một DTD hoặc lược đồ.

1

Tôi đã thử nghiệm xml MSSQL phân tích cú pháp rộng rãi, tiện ích bcp.exe hoạt động tuyệt vời cho việc này. Bí quyết là đến với terminator hàng phải vì nó phải là một giá trị không thể xảy ra trong tài liệu của bạn.Ví dụ bạn có thể làm điều này:

create table t1(x xml) 

Ceate một tập tin văn bản đơn giản có chứa chỉ delimiter bạn đã chọn. Ví dụ đặt chuỗi này trong delim.txt:

- ++++++++ -

sau đó tiếp nhau rằng đến cuối dụ tài liệu của bạn, từ dòng lệnh:

bản sao myFile.xml + delim.txt out.xml/b

Sau này bạn có thể BCP nó vào cơ sở dữ liệu như:

bcp.exe test.dbo.t1 trong out.xml -T -c -r - ++++++++ -

Nếu tài liệu là UTF-16 sau đó thay thế -c chuyển đổi với -w

0

Bạn đã thử sử dụng OPENROWSET để nhập tệp XML lớn của mình vào bảng SQL Server chưa?

CREATE TABLE XmlTable 
(
    ID INT IDENTITY, 
    XmlData XML 
) 

INSERT XmlTable(XmlData) 
    SELECT * FROM 
    OPENROWSET(BULK '(your path)\xmldata.xml', 
    SINGLE_BLOB 
) AS X 

Vì tôi không có bất kỳ tệp 5 GB nào trong tầm tay, tôi thực sự không thể tự mình kiểm tra.

Có một cách khác để bạn có thể giải quyết vấn đề này: phát trực tuyến LINQ-To-Xml. Kiểm tra này blog post nơi James Newton-King cho thấy làm thế nào để đọc XElement một-by-một, và một loạt hai phần herehere trên cùng một chủ đề của blog Microsoft XML nhóm.

Marc

0

Bạn nên tải XML của mình vào một số XML database, ví dụ: Berkeley DB XML hoặc Xindice

Ngoài ra, tôi không chắc liệu nó có thể mở rộng thành 850mb, nhưng First Object XML Editor và thư viện trình phân tích cú pháp được xây dựng, có thể xử lý các tệp khá lớn.

Ngoài ra, Baretail sẽ hiển thị tệp của bạn mà không làm đổ mồ hôi.

1

Điều đầu tiên tôi làm là lấy các byte X đầu tiên (ví dụ: 1 MB đầu tiên) của các tệp XML để tôi có thể xem chúng với trình chỉnh sửa theo lựa chọn của tôi.

Nếu bạn có Cygwin cài đặt bạn đã sở hữu một tiện ích GNU tốt đẹp để đạt được điều này: đầu

head.exe -c1M comments.xml > comments_small.xml 

Hoặc bạn có thể tìm thấy một cổng nguồn gốc của các tiện ích GNU nhất ở đây: http://unxutils.sourceforge.net/

+0

Kế hoạch tốt. Mặc dù một số thẻ phổ biến có thể bị mất trong một vài bản ghi đầu tiên. –

5

Tính đến 2013 ...

Chỉ có tùy chọn theo ý kiến ​​của tôi để nạp/file XML khổng lồ lớn trong SQL Server tiết kiệm thời gian là (như đã đề cập trước đó một người nào đó một thời gian ngắn) để sử dụng SQLXML thư viện 4,0.

Đây là giải pháp tôi đã áp dụng để tải các tệp XML lớn (7GB kích thước) trên cơ sở hàng ngày. Quá trình trước đó đã được sử dụng thao tác C# trong Script Task mất nhiều giờ để hoàn thành. Sử dụng SQLXML 4.0 mất 15-20 phút. Cách cài đặt SQLXML 4.0. từng bước here. Để có các ví dụ thực tế về cách thực hiện, hãy kết thúc để kết thúc follow this MSDN link.

XML của tôi cũng có phần tử lồng nhau, do đó, nó khá phức tạp, kết quả là 10 bảng với 2,5 đến 4 triệu hàng mỗi (tệp hàng ngày đôi khi lớn hơn 7 GB). Công việc của tôi dựa hoàn toàn vào thông tin tôi đã học và áp dụng từ hai liên kết được cung cấp ở trên.

  • Ưu:

    • nó nhanh
    • đó là Microsoft (http://www.microsoft.com/en-gb/download/details.aspx?id=30403)
    • gói SSIS sẽ được đơn giản hóa rất nhiều
    • bạn không cần phải dành hàng giờ đồng hồ để thay đổi gói SSIS nếu lược đồ XML của bạn thay đổi. SQLXML có thể tạo các bảng trong SQL Server cho bạn mỗi khi bạn chạy gói, dựa trên các mối quan hệ XSD mà bạn cung cấp.
  • Nhược

    • tạo XSD có thể mất một thời gian và đòi hỏi một số kiến ​​thức. Khi tôi làm điều đó tôi đã học được điều gì đó mới mẻ, vì vậy đây không phải là một bất lợi thực sự đối với tôi.
    • khi xem gói SSIS đơn giản như thế nào, người quản lý của bạn sẽ có ấn tượng rằng bạn không thực hiện bất kỳ công việc nào.

Để xem tệp lớn sử dụng Large Text File Viewer, đá quý nhỏ đẹp.

Lưu ý: Câu hỏi khá cũ, nhưng "vấn đề" vẫn còn nóng. Tôi đã thêm bài đăng này cho các nhà phát triển Google cách BULK LOAD tệp XML trong SSIS và truy cập tại đây.

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