Tìm hiểu nghệ thuật viết các hàm của riêng bạn bằng Python, cũng như các khái niệm chính như xác định phạm vi và xử lý lỗi Xem chi tiết Mũi tên phải Show
Viết hàm trong PythonNgười bắt đầu4 giờ 61. 4K Học cách sử dụng các phương pháp hay nhất để viết các hàm phức tạp, có thể bảo trì, tái sử dụng với tài liệu tốtHàm do người dùng xác định (UDF) cho phép bạn tạo một hàm bằng cách sử dụng biểu thức SQL hoặc mã JavaScript. UDF chấp nhận các cột đầu vào, thực hiện các hành động trên đầu vào và trả về kết quả của các hành động đó dưới dạng giá trị Bạn có thể xác định UDF là liên tục hoặc tạm thời. Bạn có thể sử dụng lại các UDF liên tục trên nhiều truy vấn, trong khi các UDF tạm thời chỉ tồn tại trong phạm vi của một truy vấn Ghi chú. Các UDF liên tục được gọi an toàn khi được chia sẻ giữa các chủ sở hữu. UDF không thể thay đổi dữ liệu, nói chuyện với các hệ thống bên ngoài hoặc gửi nhật ký tới bộ hoạt động của Google Cloud hoặc các ứng dụng tương tự.Để tạo UDF, hãy sử dụng câu lệnh CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
4. Để xóa một hàm liên tục do người dùng xác định, hãy sử dụng câu lệnh CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
5. UDF tạm thời hết hạn ngay sau khi truy vấn kết thúc. Câu lệnh CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
5 chỉ được hỗ trợ cho các UDF tạm thời trong các thủ tục và truy vấn đa câu lệnhĐể biết thông tin về UDF trong SQL kế thừa, hãy xem Hàm do người dùng xác định trong SQL kế thừa SQL UDFVí dụ sau tạo một UDF SQL tạm thời có tên là CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
7 và gọi nó từ bên trong câu lệnh CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
8CREATE TEMP FUNCTION AddFourAndDivide(x INT64, y INT64) RETURNS FLOAT64 AS ( (x + 4) / y ); SELECT val, AddFourAndDivide(val, 2) FROM UNNEST([2,3,5,8]) AS val; Ví dụ này tạo ra đầu ra sau
Ví dụ tiếp theo tạo chức năng tương tự như một UDF liên tục CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
Vì UDF này là liên tục, nên bạn phải chỉ định tập dữ liệu cho hàm ( CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
9 trong ví dụ này). Sau khi bạn chạy câu lệnh CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
4, bạn có thể gọi hàm từ một truy vấnCREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
0Các tham số SQL UDF được tạo mẫuMột tham số có loại bằng CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
01 có thể khớp với nhiều loại đối số khi hàm được gọi
Ví dụ sau đây cho thấy một SQL UDF sử dụng tham số templated CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
5Ví dụ này tạo ra đầu ra sau CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
6Ví dụ tiếp theo sử dụng tham số templated để trả về phần tử cuối cùng của một mảng thuộc bất kỳ loại nào CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
7Ví dụ này tạo ra đầu ra sau CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
8Truy vấn con vô hướngSQL UDF có thể trả về giá trị của truy vấn con vô hướng. Một truy vấn con vô hướng phải chọn một cột duy nhất Ví dụ sau đây cho thấy một SQL UDF sử dụng truy vấn con vô hướng để đếm số lượng người dùng có độ tuổi nhất định trong bảng người dùng CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
9Ví dụ này tạo ra đầu ra sau CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
0Dự án mặc định trong các biểu thức SQLTrong nội dung của SQL UDF, mọi tham chiếu đến các thực thể BigQuery, chẳng hạn như bảng hoặc dạng xem, phải bao gồm ID dự án, trừ khi thực thể nằm trong cùng một dự án chạy câu lệnh CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
4Ví dụ, hãy xem xét tuyên bố sau 0Nếu bạn chạy câu lệnh này từ ________ 106 và _______ 107 tồn tại trong ________ 106, thì câu lệnh thành công. Tuy nhiên, nếu bạn chạy câu lệnh này từ một dự án khác, thì câu lệnh sẽ không thành công. Để sửa lỗi, hãy bao gồm ID dự án trong tham chiếu bảng 1Bạn cũng có thể tham chiếu một thực thể trong một dự án hoặc tập dữ liệu khác với dự án hoặc tập dữ liệu mà bạn tạo hàm 2JavaScript UDFJavaScript UDF cho phép bạn gọi mã được viết bằng JavaScript từ truy vấn SQL Ví dụ sau hiển thị JavaScript UDF. Mã JavaScript được trích dẫn trong một chuỗi thô 3Ví dụ này tạo ra đầu ra sau 4Ví dụ tiếp theo tính tổng giá trị của tất cả các trường có tên CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
09 trong chuỗi JSON đã cho 5Ví dụ tạo ra đầu ra sau 6Các loại dữ liệu JavaScript UDF được hỗ trợMột số loại SQL có ánh xạ trực tiếp tới các loại JavaScript, nhưng những loại khác thì không. BigQuery đại diện cho các loại theo cách sau Loại dữ liệu BigQuery Loại dữ liệu JavaScriptARRAYARRAYBOOLBOOLEANBYTESSTRINGFLOAT64NUMBERNUMERIC, BIGNUMERIC được mã hóa base64Nếu giá trị NUMERIC hoặc BIGNUMERIC có thể được biểu thị chính xác dưới dạng giá trị dấu phẩy động IEEE 754 và không có phần phân số, thì giá trị đó được mã hóa dưới dạng Số. Các giá trị này nằm trong phạm vi [-253, 253]. Mặt khác, nó được mã hóa dưới dạng Chuỗi. STRINGSTRINGSTRUCTOBJECT trong đó mỗi trường STRUCT là một trường được đặt tênTIMESTAMPDATE với trường micro giây chứa phân sốCREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
50 của dấu thời gianDATEDATEVì JavaScript không hỗ trợ loại số nguyên 64 bit, nên CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
51 không được hỗ trợ làm loại đầu vào cho JavaScript UDF. Thay vào đó, hãy sử dụng CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
52 để biểu thị giá trị nguyên dưới dạng số hoặc CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
53 để biểu thị giá trị nguyên dưới dạng chuỗiBigQuery không hỗ trợ CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
51 dưới dạng loại trả về trong JavaScript UDF. Trong trường hợp này, thân hàm JavaScript có thể trả về Số JavaScript hoặc Chuỗi. BigQuery sau đó chuyển đổi một trong hai loại này thành CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
51Nếu giá trị trả về của JavaScript UDF là một CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
56, thì BigQuery sẽ đợi CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
56 cho đến khi nó được giải quyết. Nếu CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
56 ổn định ở trạng thái hoàn thành, BigQuery sẽ trả về kết quả của nó. Nếu CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
56 chuyển sang trạng thái bị từ chối, BigQuery sẽ trả về lỗiQuy tắc trích dẫnBạn phải đặt mã JavaScript trong dấu ngoặc kép. Đối với các đoạn mã đơn giản, một dòng, bạn có thể sử dụng một chuỗi trích dẫn tiêu chuẩn 7Ví dụ này tạo ra đầu ra sau 8Trong trường hợp đoạn mã chứa dấu ngoặc kép hoặc bao gồm nhiều dòng, hãy sử dụng khối dấu ngoặc kép 9Ví dụ này tạo ra đầu ra sau CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
0Bao gồm các thư viện JavaScriptBạn có thể mở rộng UDF JavaScript của mình bằng phần CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
60. Phần này cho phép bạn chỉ định các thư viện mã bên ngoài cho UDFCREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
1Trong ví dụ trước, mã trong CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
61 và CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
62 có sẵn cho bất kỳ mã nào trong phần CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
63 của UDFCác phương pháp hay nhất cho JavaScript UDFLọc trước đầu vào của bạn Nếu thông tin đầu vào của bạn có thể dễ dàng được lọc xuống trước khi được chuyển đến JavaScript UDF, thì truy vấn của bạn có thể sẽ nhanh hơn và rẻ hơn Tránh trạng thái có thể thay đổi liên tục Không lưu trữ hoặc truy cập trạng thái có thể thay đổi qua lệnh gọi JavaScript UDF. Ví dụ: tránh mẫu sau CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
2Sử dụng bộ nhớ hiệu quả Môi trường xử lý JavaScript có giới hạn bộ nhớ khả dụng cho mỗi truy vấn. Các truy vấn JavaScript UDF tích lũy quá nhiều trạng thái cục bộ có thể không thành công do cạn kiệt bộ nhớ UDF được ủy quyềnCác chức năng được ủy quyền cho phép bạn chia sẻ kết quả truy vấn với những người dùng hoặc nhóm cụ thể mà không cấp cho những người dùng hoặc nhóm đó quyền truy cập vào các bảng bên dưới. Ví dụ: một hàm được ủy quyền có thể tính toán tổng hợp trên dữ liệu hoặc tra cứu giá trị bảng và sử dụng giá trị đó trong tính toán Để biết thêm thông tin, hãy xem Tạo chức năng được ủy quyền Thêm mô tả vào UDFĐể thêm mô tả vào UDF, hãy làm theo các bước sau Truy cập trang BigQuery trong bảng điều khiển Google Cloud Truy cập BigQuery Trong bảng Explorer, mở rộng dự án và tập dữ liệu của bạn, sau đó chọn chức năng Trong ngăn Chi tiết, nhấp vào mode_edit Chỉnh sửa chi tiết quy trình để chỉnh sửa văn bản mô tả. Trong hộp thoại, nhập mô tả vào hộp hoặc chỉnh sửa mô tả hiện có. Bấm Lưu để lưu văn bản mô tả mới SQLĐể cập nhật mô tả của hàm, hãy tạo lại hàm của bạn bằng cách sử dụng câu lệnh DDL CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
4 và đặt trường CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
65 trong danh sách CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
60
Để 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 Các chức năng do cộng đồng đóng gópCác UDF do cộng đồng đóng góp có sẵn trong bộ dữ liệu công khai CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
67 và kho lưu trữ mã nguồn mở CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
68 GitHub. Bạn có thể xem tất cả các UDF cộng đồng trong bảng điều khiển Google Cloud bằng cách gắn dấu sao cho dự án CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
69 trong ngăn Explorer, sau đó mở rộng tập dữ liệu CREATE FUNCTION mydataset.AddFourAndDivide(x INT64, y INT64)
RETURNS FLOAT64
AS (
(x + 4) / y
);
70 lồng nhau trong dự án đó
người dùng là gìCác hàm do người dùng định nghĩa trong Python là gì? . Cách chúng ta định nghĩa và gọi hàm trong Python đã được thảo luận. Các chức năng dễ dàng đi kèm với Python được gọi là các chức năng tích hợp sẵn. Functions that we define ourselves to do certain specific task are referred as user-defined functions. The way in which we define and call functions in Python are already discussed. Functions that readily come with Python are called built-in functions.
Làm thế nào bạn sẽ viết một người dùngCách tạo hàm do người dùng xác định trong Python . Sử dụng từ khóa def để bắt đầu định nghĩa hàm Đặt tên cho chức năng của bạn Cung cấp một hoặc nhiều tham số. . Nhập các dòng mã làm cho chức năng của bạn làm bất cứ điều gì nó làm. . Sử dụng từ khóa return ở cuối hàm để trả về kết quả Chúng ta có thể tạo người dùng khôngPython cung cấp các hàm dựng sẵn như print(), v.v. nhưng chúng tôi cũng có thể tạo các chức năng của riêng bạn . Các hàm này được gọi là hàm do người dùng định nghĩa.
4 loại hàm trong Python là gì?Hàm Python – Mục tiêu
. Các hàm tích hợp sẵn của Python, hàm đệ quy Python, hàm lambda Python và các hàm do người dùng Python xác định cùng với cú pháp và ví dụ của chúng |