Đọc tệp CSV từ lưu trữ Azure blob python
Giả sử bạn có tệp csv, bộ chứa blob và quyền truy cập vào không gian làm việc của DataBricks. Mục đích của blog nhỏ này là để cho thấy quy trình từ việc có một tệp trên máy tính cục bộ của bạn đến việc đọc dữ liệu vào databricks dễ dàng như thế nào. Tôi sẽ thực hiện quá trình tải tệp csv lên một vùng chứa blob màu xanh theo cách thủ công và sau đó đọc nó trong DataBricks bằng mã python Show Bước 1. Tải tệp lên vùng chứa blob của bạn Điều này có thể được thực hiện đơn giản bằng cách điều hướng đến vùng chứa blob của bạn. Từ đó, bạn có thể nhấp vào nút tải lên và chọn tệp bạn quan tâm. Sau khi được chọn, bạn cần nhấp vào nút tải lên trong thanh tải lên. Xem ảnh chụp màn hình bên dưới Sau khi tải lên, bạn sẽ có thể xem tệp có sẵn trong vùng chứa blob của mình như hình bên dưới Bước 2. Nhận thông tin đăng nhập cần thiết cho databricks để kết nối với bộ chứa blob của bạn Từ cổng thông tin Azure của bạn, bạn cần điều hướng đến tất cả các tài nguyên, sau đó chọn tài khoản lưu trữ blob của mình và từ bên dưới cài đặt, chọn khóa tài khoản. Khi đã có, hãy sao chép khóa bên dưới Key1 vào notepad cục bộ Bước 3. Định cấu hình DataBricks để đọc tệp Tại đây, bạn cần điều hướng đến không gian làm việc của databricks (tạo một cái nếu bạn chưa có) và khởi chạy nó. Sau khi khởi chạy, hãy chuyển đến không gian làm việc và tạo sổ ghi chép python mới Để bắt đầu đọc dữ liệu, trước tiên, bạn cần định cấu hình phiên spark của mình để sử dụng thông tin đăng nhập cho vùng chứa blob của bạn. Điều này đơn giản có thể được thực hiện thông qua tia lửa. conf. đặt lệnh. Chính xác hơn, chúng tôi bắt đầu với những điều sau đây storage_account_name = 'nameofyourstorageaccount' storage_account_access_key = 'thekeyfortheblobcontainer' spark.conf.set('fs.azure.account.key.' + storage_account_name + '.blob.core.windows.net', storage_account_access_key) Sau khi hoàn tất, chúng ta cần xây dựng đường dẫn tệp trong vùng chứa blob và đọc tệp dưới dạng khung dữ liệu tia lửa blob_container = 'yourblobcontainername' filePath = "wasbs://" + blob_container + "@" + storage_account_name + ".blob.core.windows.net/Sales/SalesFile.csv" salesDf = spark.read.format("csv").load(filePath, inferSchema = True, header = True) Và chúc mừng, chúng ta đã hoàn thành. Bạn có thể sử dụng lệnh hiển thị để xem dữ liệu của chúng tôi như hình bên dưới Trong blog này, chúng ta sẽ tìm hiểu cách đọc tệp CSV từ bộ lưu trữ blob và đẩy dữ liệu vào bảng nhóm SQL khớp thần kinh bằng tập lệnh python Azure Databricks. Trong phần 1, chúng ta đã tạo không gian làm việc phân tích khớp thần kinh Azure, nhóm SQL chuyên dụng, trong phần này, chúng ta đã thấy cách tạo nhóm SQL chuyên dụng. Trong blog này, chúng tôi sẽ sử dụng chuỗi kết nối JDBC để kết nối nhóm SQL Bước 1. Đăng nhập vào cổng Azure. Mở Azure Databricks và nhấp vào không gian làm việc ăn trưa để tạo Notebook mới
Sau khi bảng được tạo, bạn có thể cập nhật ngày hết hạn, mô tả và nhãn của bảng nhưng bạn không thể thêm ngày hết hạn của phân vùng sau khi bảng được tạo bằng Google Cloud console. Để biết thêm thông tin, hãy xem Quản lý bảng. SQLSử dụng câu lệnh 12 DDL. Ví dụ sau tải tệp CSV vào bảng mới 13
Để biết thêm thông tin về cách chạy truy vấn, hãy xem Chạy truy vấn tương tác bqSử dụng lệnh 14, chỉ định 15 bằng cờ 16 và bao gồm URI lưu trữ đám mây. Bạn có thể bao gồm một URI, danh sách URI được phân tách bằng dấu phẩy hoặc URI chứa ký tự đại diện. Cung cấp lược đồ nội tuyến, trong tệp định nghĩa lược đồ hoặc sử dụng tính năng tự động phát hiện lược đồ. Nếu bạn không chỉ định lược đồ và 17 là 10 và bảng đích tồn tại, thì lược đồ của bảng đích sẽ được sử dụng(Tùy chọn) Cung cấp cờ 19 và đặt giá trị cho vị trí của bạnCác cờ tùy chọn khác bao gồm
Để tải dữ liệu CSV vào BigQuery, hãy nhập lệnh sau 8Ở đâu
ví dụ Lệnh sau tải dữ liệu từ 510 vào một bảng có tên là 13 trong 512. Lược đồ được xác định trong một tệp lược đồ cục bộ có tên là 513
Lệnh sau tải dữ liệu từ 510 vào một bảng có tên là 13 trong 512. Lược đồ được xác định trong một tệp lược đồ cục bộ có tên là 513. Tệp CSV bao gồm hai hàng tiêu đề. Nếu 29 không được chỉ định, hành vi mặc định là giả sử tệp không chứa tiêu đềblob_container = 'yourblobcontainername' filePath = "wasbs://" + blob_container + "@" + storage_account_name + ".blob.core.windows.net/Sales/SalesFile.csv" salesDf = spark.read.format("csv").load(filePath, inferSchema = True, header = True)0 Lệnh sau tải dữ liệu từ 510 vào bảng được phân vùng theo thời gian nhập có tên là 13 trong 512. Lược đồ được xác định trong một tệp lược đồ cục bộ có tên là 513 1Lệnh sau tải dữ liệu từ 510 vào một bảng được phân vùng mới có tên là 13 trong 512. Bảng được phân vùng trên cột 526. Lược đồ được xác định trong một tệp lược đồ cục bộ có tên là 513 1Lệnh sau tải dữ liệu từ 510 vào một bảng có tên là 13 trong 512. Lược đồ được tự động phát hiện 2Lệnh sau tải dữ liệu từ 510 vào một bảng có tên là 13 trong 512. Lược đồ được xác định nội tuyến ở định dạng 534______53Ghi chú. Khi bạn chỉ định lược đồ bằng công cụ dòng lệnh 535, bạn không thể bao gồm loại 536 ( 537), bạn không thể bao gồm mô tả trường và bạn không thể chỉ định chế độ trường. Tất cả các chế độ trường mặc định là 538. Để bao gồm các mô tả trường, chế độ và loại 536, hãy cung cấp tệp lược đồ JSON thay thế. Lệnh sau tải dữ liệu từ nhiều tệp trong 540 vào một bảng có tên là 13 trong 512. URI lưu trữ đám mây sử dụng ký tự đại diện. Lược đồ được tự động phát hiện 2Lệnh sau tải dữ liệu từ nhiều tệp trong 540 vào một bảng có tên là 13 trong 512. Lệnh bao gồm một danh sách các URI lưu trữ đám mây được phân tách bằng dấu phẩy với các ký tự đại diện. Lược đồ được xác định trong một tệp lược đồ cục bộ có tên là 513 50API
ghi chú API
C#Trước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập C# trong hướng dẫn bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery C# . Xem trên GitHub Phản hồi 51ĐiTrước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập Go trong phần bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery Go . Xem trên GitHub Phản hồi 52JavaTrước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập Java trong hướng dẫn bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery Java . Xem trên GitHub Phản hồi 53Nút. jsTrước khi thử mẫu này, hãy làm theo Nút. js hướng dẫn thiết lập trong bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem Nút BigQuery. js Tài liệu tham khảo API. Xem trên GitHub Phản hồi 54PHPTrước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập PHP trong hướng dẫn bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery PHP . Xem trên GitHub Phản hồi 55con trănTrước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập Python trong hướng dẫn bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery Python . Sử dụng ứng dụng khách. phương thức load_table_from_uri() để tải dữ liệu từ tệp CSV trong Cloud Storage. Cung cấp định nghĩa lược đồ rõ ràng bằng cách đặt LoadJobConfig. thuộc tính lược đồ vào danh sách các đối tượng SchemaField Xem trên GitHub Phản hồi 56hồng ngọcTrước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập Ruby trong phần bắt đầu nhanh BigQuery bằng cách sử dụng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery Ruby . Xem trên GitHub Phản hồi 57Đang tải dữ liệu CSV vào bảng sử dụng phân vùng thời gian dựa trên cộtĐể tải dữ liệu CSV từ Cloud Storage vào bảng BigQuery sử dụng phân vùng thời gian dựa trên cột Trước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập Go trong phần bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery Go . Xem trên GitHub Phản hồi JavaTrước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập Java trong hướng dẫn bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery Java . Xem trên GitHub Phản hồi 59Nút. jsTrước khi thử mẫu này, hãy làm theo Nút. js hướng dẫn thiết lập trong bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem Nút BigQuery. js Tài liệu tham khảo API. Xem trên GitHub Phản hồi 80con trănTrước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập Python trong hướng dẫn bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery Python . Xem trên GitHub Phản hồi 81Thêm vào hoặc ghi đè lên bảng bằng dữ liệu CSVBạn có thể tải dữ liệu bổ sung vào bảng từ tệp nguồn hoặc bằng cách nối thêm kết quả truy vấn Trong bảng điều khiển Google Cloud, hãy sử dụng tùy chọn Tùy chọn ghi để chỉ định hành động cần thực hiện khi bạn tải dữ liệu từ tệp nguồn hoặc từ kết quả truy vấn Bạn có các tùy chọn sau khi tải thêm dữ liệu vào bảng Tùy chọn bảng điều khiển 535 cờ công cụ Thuộc tính API BigQueryMô tảGhi nếu trốngKhông được hỗ trợ 563Chỉ ghi dữ liệu nếu bảng trống. Nối vào bảng 564 hoặc 565; . Ghi đè lên bảng 568 hoặc 569 570Xóa tất cả dữ liệu hiện có trong một bảng trước khi ghi dữ liệu mới. Hành động này cũng xóa lược đồ bảng và xóa mọi khóa Cloud KMSNếu bạn tải dữ liệu vào một bảng hiện có, tác vụ tải có thể nối thêm dữ liệu hoặc ghi đè lên bảng Ghi chú. Trang này không đề cập đến việc nối thêm hoặc ghi đè lên các bảng được phân vùng. Để biết thông tin về nối thêm và ghi đè các bảng được phân vùng, hãy xem. Thêm vào và ghi đè lên dữ liệu bảng được phân vùng.Trong bảng điều khiển Google Cloud, hãy truy cập trang BigQuery Truy cập BigQuery Sử dụng câu lệnh
Để biết thêm thông tin về cách chạy truy vấn, hãy xem Chạy truy vấn tương tác bqSử dụng lệnh 14, chỉ định 15 bằng cờ 16 và bao gồm URI lưu trữ đám mây. Bạn có thể bao gồm một URI, danh sách URI được phân tách bằng dấu phẩy hoặc URI chứa ký tự đại diệnCung cấp lược đồ nội tuyến, trong tệp định nghĩa lược đồ hoặc sử dụng tính năng tự động phát hiện lược đồ. Nếu bạn không chỉ định lược đồ và 17 là 10 và bảng đích tồn tại, thì lược đồ của bảng đích sẽ được sử dụngChỉ định cờ 568 để ghi đè lên bảng. Sử dụng cờ 564 để thêm dữ liệu vào bảng. Nếu không có cờ nào được chỉ định, mặc định là nối thêm dữ liệuCó thể sửa đổi lược đồ của bảng khi bạn nối thêm hoặc ghi đè lên nó. Để biết thêm thông tin về các thay đổi lược đồ được hỗ trợ trong quá trình vận hành tải, hãy xem Sửa đổi lược đồ bảng (Tùy chọn) Cung cấp cờ 19 và đặt giá trị cho vị trí của bạnCác cờ tùy chọn khác bao gồm
84ở đâu
ví dụ Lệnh sau tải dữ liệu từ 510 và ghi đè lên bảng có tên 13 trong 512. Lược đồ được xác định bằng tính năng tự động phát hiện lược đồ 85Lệnh sau tải dữ liệu từ 510 và nối thêm dữ liệu vào bảng có tên 13 trong 512. Lược đồ được xác định bằng tệp lược đồ JSON — 513 86API
ĐiTrước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập Go trong phần bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery Go . Xem trên GitHub Phản hồi 87JavaTrước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập Java trong hướng dẫn bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery Java . Xem trên GitHub Phản hồi 88Nút. jsTrước khi thử mẫu này, hãy làm theo Nút. js hướng dẫn thiết lập trong bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem Nút BigQuery. js Tài liệu tham khảo API. Để thay thế các hàng trong một bảng hiện có, hãy đặt giá trị 825 trong tham số 826 thành 827Xem trên GitHub Phản hồi 89Trước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập PHP trong hướng dẫn bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery PHP . Xem trên GitHub Phản hồi 0con trănTrước khi dùng thử mẫu này, hãy làm theo hướng dẫn thiết lập Python trong hướng dẫn bắt đầu nhanh BigQuery bằng thư viện máy khách. Để biết thêm thông tin, hãy xem tài liệu tham khảo API BigQuery Python . Để thay thế các hàng trong một bảng hiện có, hãy đặt LoadJobConfig. write_disposition vào hằng số SourceFormat 570Xem trên GitHub Phản hồi 1Đang tải dữ liệu CSV được phân vùng tổ ongBigQuery hỗ trợ tải dữ liệu CSV được phân vùng tổ ong được lưu trữ trên Cloud Storage và sẽ điền các cột phân vùng tổ ong dưới dạng các cột trong bảng đích do BigQuery quản lý. Để biết thêm thông tin, hãy xem Tải dữ liệu được phân vùng bên ngoài từ bộ nhớ đám mây Chi tiết tải dữ liệu CSVPhần này mô tả cách BigQuery xử lý các tùy chọn định dạng CSV khác nhau mã hóaBigQuery dự kiến dữ liệu CSV sẽ được mã hóa UTF-8. Nếu bạn có tệp CSV với dữ liệu được mã hóa ở định dạng ISO-8859-1 (còn được gọi là Latin-1), thì bạn nên chỉ định rõ ràng mã hóa để BigQuery có thể chuyển đổi dữ liệu thành UTF-8 một cách chính xác Nếu bạn không chỉ định mã hóa hoặc nếu bạn chỉ định mã hóa UTF-8 khi tệp CSV không được mã hóa UTF-8, thì BigQuery sẽ cố gắng chuyển đổi dữ liệu thành UTF-8. Nói chung, dữ liệu của bạn sẽ được tải thành công, nhưng nó có thể không khớp với từng byte như bạn mong đợi. Để tránh điều này, hãy chỉ định mã hóa chính xác bằng cách sử dụng cờ 829Ghi chú. Theo mặc định, nếu tệp CSV chứa ký tự ASCII 17 (NULL), thì bạn không thể tải dữ liệu vào BigQuery. Nếu bạn muốn cho phép ASCII 17 và các ký tự điều khiển ASCII khác, hãy đặt 832 cho công việc tải của bạn. Nếu BigQuery không thể chuyển đổi một ký tự không phải ký tự ASCII 17, thì BigQuery sẽ chuyển đổi ký tự đó thành ký tự thay thế Unicode tiêu chuẩn. �Dấu phân cách trườngDấu phân cách trong tệp CSV có thể là bất kỳ ký tự byte đơn nào. Nếu tệp nguồn sử dụng mã hóa ISO-8859-1, bất kỳ ký tự nào cũng có thể là dấu phân cách. Nếu tệp nguồn sử dụng mã hóa UTF-8, bất kỳ ký tự nào trong phạm vi thập phân 1-127 (U+0001-U+007F) đều có thể được sử dụng mà không cần sửa đổi. Bạn có thể chèn một ký tự ISO-8859-1 bên ngoài phạm vi này làm dấu phân cách và BigQuery sẽ diễn giải chính xác ký tự đó. Tuy nhiên, nếu bạn sử dụng ký tự nhiều byte làm dấu phân cách, một số byte sẽ được diễn giải không chính xác như một phần của giá trị trường Nói chung, cách tốt nhất là sử dụng dấu phân cách chuẩn, chẳng hạn như tab, dấu gạch ngang hoặc dấu phẩy. Mặc định là dấu phẩy Loại dữ liệuBoolean. BigQuery có thể phân tích cú pháp bất kỳ cặp nào sau đây cho dữ liệu Boolean. 1 hoặc 0, đúng hoặc sai, t hoặc f, có hoặc không, hoặc y hoặc n (tất cả đều không phân biệt chữ hoa chữ thường). Tự động phát hiện sơ đồ tự động phát hiện bất kỳ trong số này ngoại trừ 0 và 1byte. Các cột có loại BYTES phải được mã hóa dưới dạng Base64 Ngày tháng. Các cột có loại NGÀY phải ở định dạng 5Ngày giờ. Các cột có loại DATETIME phải ở định dạng 835Môn Địa lý. Các cột có loại ĐỊA LÝ phải chứa các chuỗi ở một trong các định dạng sau
Nếu bạn sử dụng WKB, giá trị phải được mã hóa hex Danh sách sau đây cho thấy các ví dụ về dữ liệu hợp lệ
Trước khi tải dữ liệu ĐỊA LÝ, hãy đọc thêm Đang tải dữ liệu không gian địa lý khoảng thời gian. Các cột có loại 839 phải ở định dạng 840, trong đó
Bạn có thể chỉ ra giá trị âm bằng cách thêm trước dấu gạch ngang (-) Danh sách sau đây cho thấy các ví dụ về dữ liệu hợp lệ
Để tải dữ liệu INTERVAL, bạn phải sử dụng lệnh 14 và sử dụng cờ 845 để chỉ định lược đồ. Bạn không thể tải lên dữ liệu INTERVAL bằng cách sử dụng bảng điều khiểnJSON. Dấu ngoặc kép được thoát ra bằng cách sử dụng chuỗi hai ký tự 846. Để biết thêm thông tin, hãy xem ví dụ về tải dữ liệu JSON từ tệp CSVThời gian. Các cột có loại THỜI GIAN phải ở định dạng 847Dấu thời gian. BigQuery chấp nhận các định dạng dấu thời gian khác nhau. Dấu thời gian phải bao gồm phần ngày và phần thời gian
Ví dụ: bất kỳ giá trị nào sau đây là giá trị dấu thời gian hợp lệ
Nếu bạn cung cấp một giản đồ, thì BigQuery cũng chấp nhận thời gian Unix epoch cho các giá trị dấu thời gian. Tuy nhiên, tính năng tự động phát hiện lược đồ không phát hiện trường hợp này và thay vào đó xử lý giá trị dưới dạng số hoặc loại chuỗi Ví dụ về giá trị dấu thời gian Unix epoch
Tự động phát hiện lược đồPhần này mô tả hành vi tự động phát hiện lược đồ khi tải tệp CSV dấu phân cách CSVBigQuery phát hiện các dấu phân cách sau
tiêu đề CSVBigQuery phỏng đoán các tiêu đề bằng cách so sánh hàng đầu tiên của tệp với các hàng khác trong tệp. Nếu dòng đầu tiên chỉ chứa chuỗi và các dòng khác chứa các loại dữ liệu khác, BigQuery sẽ giả định rằng hàng đầu tiên là hàng tiêu đề. Trong trường hợp đó, BigQuery chỉ định tên cột dựa trên tên trường trong hàng tiêu đề. Tên có thể được sửa đổi để đáp ứng quy tắc đặt tên cho các cột trong BigQuery. Ví dụ: khoảng trắng sẽ được thay thế bằng dấu gạch dưới Mặt khác, BigQuery giả định hàng đầu tiên là hàng dữ liệu và gán các tên cột chung, chẳng hạn như 852. Lưu ý rằng sau khi tạo bảng, không thể cập nhật tên cột trong lược đồ, mặc dù bạn có thể thay đổi tên theo cách thủ công sau khi tạo bảng. Một tùy chọn khác là cung cấp lược đồ rõ ràng thay vì sử dụng tính năng tự động phát hiệnBạn có thể có tệp CSV có hàng tiêu đề, trong đó tất cả các trường dữ liệu đều là chuỗi. Trong trường hợp đó, BigQuery sẽ không tự động phát hiện hàng đầu tiên là tiêu đề. Sử dụng tùy chọn 29 để bỏ qua hàng tiêu đề. Nếu không, tiêu đề sẽ được nhập dưới dạng dữ liệu. Ngoài ra, hãy xem xét việc cung cấp một lược đồ rõ ràng trong trường hợp này để bạn có thể gán tên cộtCSV trích dẫn dòng mớiBigQuery phát hiện các ký tự dòng mới được trích dẫn trong trường CSV và không diễn giải ký tự dòng mới được trích dẫn dưới dạng ranh giới hàng tùy chọn CSVĐể thay đổi cách BigQuery phân tích cú pháp dữ liệu CSV, hãy chỉ định các tùy chọn bổ sung trong bảng điều khiển Google Cloud, công cụ dòng lệnh 535 hoặc API |