UDP is a message-oriented protocol, so it's guaranteed that complete datagrams are sent, not partial datagrams. It is however possible that datagrams are simply too long to be sent, which is an error exposed to the programmer on at least Linux and Windows.
After UDP does its processing, we then have two branches for the underlying protocol:
IPV4
The IP protocol guarantees that packets that arrive are error-free, that is "whole" (source):
IPv4 provides safeguards to ensure that the IP packet header is error-free. A routing node calculates a checksum for a packet. If the checksum is bad, the routing node discards the packet.
The protocol layers below UDP (IP, Link etc) may split up the data (fragmentation), but they'll guarantee that when it's yielded to the UDP layer the packet is the same as the one that entered their protocol layer on the sender.
IPV6
The IP protocol no longer guarantees packets arrive error-free, but the UDP pseudo-headers used over IPv6 include checksum information so rather than the IP layer guaranteeing this, the UDP layer does.
As such, datagrams are guaranteed to be sent whole, and (if they're received) to be error-free. This is summed up by the following from this comparison between UDP and TCP:
Packets have definite boundaries which are honored upon receipt, meaning a read operation at the receiver socket will yield an entire message as it was originally sent.