Apache Hudi (incubating) is an effort undergoing incubation 
at The Apache Software Foundation (ASF), sponsored by the Apache Incubator. 

Incubation is required of all newly accepted projects until a further review 
indicates that the infrastructure, communications, and decision making process 
have stabilized in a manner consistent with other successful ASF projects.

While incubation status is not necessarily a reflection of the
completeness or stability of the code, it does indicate that the
project has yet to be fully endorsed by the ASF.

Some of the incubating project's releases may not be fully compliant
with ASF policy. For example, releases may have incomplete or
un-reviewed licensing conditions. What follows is a list of known
issues the project is currently aware of (note that this list, by
definition, is likely to be incomplete): 

 * The LICENSE and NOTICE files may not be complete and will be fixed with the next release.

If you are planning to incorporate this work into your
product or project, please be aware that you will need to conduct a
thorough licensing review to determine the overall implications of
including this work. For the current status of this project through the Apache
Incubator visit: 

http://incubator.apache.org/projects/hudi.html
