{"action":"created","comment":{"url":"https://api.github.com/repos/apache/incubator-hudi/pulls/comments/335816110","pull_request_review_id":303000778,"id":335816110,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDMzNTgxNjExMA==","diff_hunk":"@@ -7,191 +7,157 @@ toc: false\n permalink: quickstart.html\n ---\n <br/>\n-为快速了解Hudi的功能，我们制作了一个基于Docker设置、所有依赖系统都在本地运行的[演示视频](https://www.youtube.com/watch？V=vhngusxdrd0)。\n-我们建议您复制相同的设置然后按照[这里](docker_demo.html)的步骤自己运行这个演示。另外，如果您正在寻找将现有数据迁移到Hudi的方法，请参阅[迁移指南](migration_guide.html)。\n \n-如果您已经安装了hive、hadoop和spark，那么请继续阅读。\n+本指南简要介绍了使用spark-shell来快速浏览的Hudi功能。使用Spark数据源，我们将通过代码段展示如何插入和更新的Hudi默认存储类型数据集：\n+[写时复制](https://hudi.apache.org/concepts.html#copy-on-write-storage)。每次写操作之后，我们还将展示如何读取快照和增量读取数据。\n \n-## 下载Hudi\n-\n-Git检出[代码](https://github.com/apache/incubator-hudi)或下载[最新版本](https://github.com/apache/incubator-hudi/archive/hudi-0.4.5.zip)\n-\n-并通过命令行构建maven项目\n+## 编译Hudi spark整包\n+Hudi要求在*nix系统上安装Java 8。Git检出[代码](https://github.com/apache/incubator-hudi)，并通过命令行构建maven项目:\n \n ```\n-$ mvn clean install -DskipTests -DskipITs\n-```\n+# 检出和编译\n+git clone https://github.com/apache/incubator-hudi.git && cd incubator-hudi\n+mvn clean install -DskipTests -DskipITs\n \n-如果使用旧版本的Hive(Hive-1.2.1以前)，使用\n-```\n-$ mvn clean install -DskipTests -DskipITs -Dhive11\n+# 为后续使用导入hudi-spark-bundle位置\n+mkdir -p /tmp/hudi && cp packaging/hudi-spark-bundle/target/hudi-spark-bundle-*.*.*-SNAPSHOT.jar  /tmp/hudi/hudi-spark-bundle.jar\n+export HUDI_SPARK_BUNDLE_PATH=/tmp/hudi/hudi-spark-bundle.jar\n ```\n \n-> 对于IDE，您可以将代码作为普通的maven项目导入IntelliJ。\n-您可能需要将spark jars文件夹添加到 'Module Settings' 下的项目依赖中，以便能够在IDE运行。\n-\n-\n-### 版本兼容性\n-\n-Hudi要求在*nix系统上安装Java 8。 Hudi使用Spark-2.x版本。此外，我们已经验证Hudi可使用以下Hadoop/Hive/Spark组合。\n-\n-| Hadoop | Hive  | Spark | 构建Hudi说明 |\n-| ---- | ----- | ---- | ---- |\n-| 2.6.0-cdh5.7.2 | 1.1.0-cdh5.7.2 | spark-2.[1-3].x | Use “mvn clean install -DskipTests -Dhadoop.version=2.6.0-cdh5.7.2 -Dhive.version=1.1.0-cdh5.7.2” |\n-| Apache hadoop-2.8.4 | Apache hive-2.3.3 | spark-2.[1-3].x | Use \"mvn clean install -DskipTests\" |\n-| Apache hadoop-2.7.3 | Apache hive-1.2.1 | spark-2.[1-3].x | Use \"mvn clean install -DskipTests\" |\n-\n-> 如果你的环境有其他版本的hadoop/hive/spark，请使用Hudi并告诉我们是否存在任何问题。\n-\n-## 生成样本数据集\n-\n-### 环境变量\n-\n-请根据您的设置配置以下环境变量。我们给出了一个CDH版本的示例设置\n+## 设置spark-shell\n+Hudi适用于Spark-2.x版本。您可以按照[此处](https://spark.apache.org/downloads.html)中的说明设置spark。\n+在提取的目录中，使用spark-shell运行Hudi：\n \n ```\n-cd incubator-hudi \n-export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/\n-export HIVE_HOME=/var/hadoop/setup/apache-hive-1.1.0-cdh5.7.2-bin\n-export HADOOP_HOME=/var/hadoop/setup/hadoop-2.6.0-cdh5.7.2\n-export HADOOP_INSTALL=/var/hadoop/setup/hadoop-2.6.0-cdh5.7.2\n-export HADOOP_CONF_DIR=$HADOOP_INSTALL/etc/hadoop\n-export SPARK_HOME=/var/hadoop/setup/spark-2.3.1-bin-hadoop2.7\n-export SPARK_INSTALL=$SPARK_HOME\n-export SPARK_CONF_DIR=$SPARK_HOME/conf\n-export PATH=$JAVA_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:$SPARK_INSTALL/bin:$PATH\n+bin/spark-shell --jars $HUDI_SPARK_BUNDLE_PATH --conf 'spark.serializer=org.apache.spark.serializer.KryoSerializer'\n ```\n \n-### 运行HoodieJavaApp\n-\n-运行 __hudi-spark/src/test/java/HoodieJavaApp.java__ 类，将两个提交(提交1 => 100个插入，提交2 => 100个更新到先前插入的100个记录)放到DFS/本地文件系统上。从命令行运行脚本\n+设置表名、基本路径和数据生成器以生成记录。\n \n ```\n-cd hudi-spark\n-./run_hoodie_app.sh --help\n-Usage: <main class> [options]\n-  Options:\n-    --help, -h\n-       Default: false\n-    --table-name, -n\n-       table name for Hudi sample table\n-       Default: hoodie_rt\n-    --table-path, -p\n-       path for Hudi sample table\n-       Default: file:///tmp/hoodie/sample-table\n-    --table-type, -t\n-       One of COPY_ON_WRITE or MERGE_ON_READ\n-       Default: COPY_ON_WRITE\n-```\n-\n-这个类允许您选择表名、输出路径和存储类型。在您自己的应用程序中，请确保包含`hudi-spark`模块依赖并遵循类似模式通过数据源写入/读取数据集。\n+import org.apache.hudi.QuickstartUtils._\n+import scala.collection.JavaConversions._\n+import org.apache.spark.sql.SaveMode._\n+import org.apache.hudi.DataSourceReadOptions._\n+import org.apache.hudi.DataSourceWriteOptions._\n+import org.apache.hudi.config.HoodieWriteConfig._\n \n-## 查询Hudi数据集\n+val tableName = \"hudi_cow_table\"\n+val basePath = \"file:///tmp/hudi_cow_table\"\n+val dataGen = new DataGenerator\n+```\n \n-接下来，我们将样本数据集注册到Hive Metastore并尝试使用[Hive](#hive)、[Spark](#spark)和[Presto](#presto)进行查询\n+[数据生成器](https://github.com/apache/incubator-hudi/blob/master/hudi-spark/src/main/java/org/apache/hudi/QuickstartUtils.java)\n+可以基于行程样本模式生成插入和更新的样本。\n+[这里](https://github.com/apache/incubator-hudi/blob/master/hudi-spark/src/main/java/org/apache/hudi/QuickstartUtils.java#L57)\n \n-### 本地启动Hive Server\n+## 插入数据 {#inserts}\n+生成一些新的行程样本，将其加载到DataFrame中，然后将DataFrame写入Hudi数据集中，如下所示。\n \n ```\n-hdfs namenode # start name node\n-hdfs datanode # start data node\n-\n-bin/hive --service metastore  # start metastore\n-bin/hiveserver2 \\\n-  --hiveconf hive.root.logger=INFO,console \\\n-  --hiveconf hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat \\\n-  --hiveconf hive.stats.autogather=false \\\n-  --hiveconf hive.aux.jars.path=/path/to/packaging/hudi-hive-bundle/target/hudi-hive-bundle-0.4.6-SNAPSHOT.jar\n-\n+val inserts = convertToStringList(dataGen.generateInserts(10))\n+val df = spark.read.json(spark.sparkContext.parallelize(inserts, 2))\n+df.write.format(\"org.apache.hudi\").\n+    options(getQuickstartWriteConfigs).\n+    option(PRECOMBINE_FIELD_OPT_KEY, \"ts\").\n+    option(RECORDKEY_FIELD_OPT_KEY, \"uuid\").\n+    option(PARTITIONPATH_FIELD_OPT_KEY, \"partitionpath\").\n+    option(TABLE_NAME, tableName).\n+    mode(Overwrite).\n+    save(basePath);\n ```\n \n-### 运行Hive同步工具\n-Hive同步工具将在hive Metastore中更新/创建必要的元数据(模式和分区)，这允许模式演变和新分区的增量添加。它使用一种增量方法，将最后一次的同步提交时间存储在TBLPROPERTIES中，并且只同步上次存储的同步提交时间后的提交。\n-每次写入后， [Spark Datasource](writing_data.html #datasource-writer)和[DeltaStreamer](writing_data.html＃deltastreamer)都可执行此操作。\n+`模式(覆盖)`覆盖并重新创建数据集(如果已经存在)。\n+您可以检查在`/tmp/hudi_cow_table/<region>/<country>/<city>/`下生成的数据。我们提供了一个记录键\n+([schema](＃sample-schema)中的\"uuid\")，分区字段(\"region /county/city\"）和组合逻辑(\"ts\"[schema](＃sample-schema))\n+以确保行程记录在每个分区中都是唯一的。更多信息请参阅\n+[对Hudi中的数据进建模](https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=113709185#Frequentlyaskedquestions(FAQ)-HowdoImodelthedatastoredinHudi?)\n+有关将数据提取到Hudi中的方法的信息，请参阅[写入Hudi数据集](https://hudi.apache.org/writing_data.html)。\n+这里我们使用默认的写操作：`插入更新`。 如果您的工作负载没有`更新`，也可以使用更快的`插入`或`批量插入`操作。\n+想了解更多信息，请参阅[写操作](https://hudi.apache.org/writing_data.html#write-operations)\n \n+## 查询数据 {#query}\n \n-```\n-cd hudi-hive\n-./run_sync_tool.sh\n-  --user hive\n-  --pass hive\n-  --database default\n-  --jdbc-url \"jdbc:hive2://localhost:10010/\"\n-  --base-path tmp/hoodie/sample-table/\n-  --table hoodie_test\n-  --partitioned-by field1,field2\n+将数据文件加载到数据帧中。\n \n+```\n+val roViewDF = spark.\n+    read.\n+    format(\"org.apache.hudi\").\n+    load(basePath + \"/*/*/*/*\")\n+roViewDF.registerTempTable(\"hudi_ro_table\")\n+spark.sql(\"select fare, begin_lon, begin_lat, ts from  hudi_ro_table where fare > 20.0\").show()\n+spark.sql(\"select _hoodie_commit_time, _hoodie_record_key, _hoodie_partition_path, rider, driver, fare from  hudi_ro_table\").show()\n ```\n \n-> 若你想亲手运行。请参考[这个](https://cwiki.apache.org/confluence/display/HUDI/Registering+sample+dataset+to+Hive+via+beeline).\n+该查询提供已提取数据的读取优化视图。由于我们的分区路径(\"region/country/city\")是嵌套的3个级别\n+从基本路径开始，我们使用了`load(basePath + \"/*/*/*/*\")`。\n+有关支持的所有存储类型和视图的更多信息，请参考[存储类型和视图](https://hudi.apache.org/concepts.html#storage-types--views)。\n \n-### HiveQL {#hive}\n+## 更新数据 {#updates}\n \n-我们首先对表的最新提交的快照进行查询\n+这类似于插入新数据。使用数据生成器生成对现有行程的更新，加载到数据帧并将数据帧写入hudi数据集。\n \n ```\n-hive> set hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat;\n-hive> set hive.stats.autogather=false;\n-hive> add jar file:///path/to/hudi-hive-bundle-0.4.6-SNAPSHOT.jar;\n-hive> select count(*) from hoodie_test;\n-...\n-OK\n-100\n-Time taken: 18.05 seconds, Fetched: 1 row(s)\n-hive>\n+val updates = convertToStringList(dataGen.generateUpdates(10))\n+val df = spark.read.json(spark.sparkContext.parallelize(updates, 2));\n+df.write.format(\"org.apache.hudi\").\n+    options(getQuickstartWriteConfigs).\n+    option(PRECOMBINE_FIELD_OPT_KEY, \"ts\").\n+    option(RECORDKEY_FIELD_OPT_KEY, \"uuid\").\n+    option(PARTITIONPATH_FIELD_OPT_KEY, \"partitionpath\").\n+    option(TABLE_NAME, tableName).\n+    mode(Append).\n+    save(basePath);\n ```\n \n-### SparkSQL {#spark}\n+注意，保存模式现在为`追加`。通常，除非您是第一次尝试创建数据集，否则请始终使用追加模式。\n+[查询](＃query)数据现在再次将显示更新的行程。每个写操作都会生成一个新的由时间戳表示的[commit](http://hudi.incubator.apache.org/concepts.html)\n+。在之前提交的相同的`_hoodie_record_key`中寻找`_hoodie_commit_time`, `rider`, `driver`字段变更。\n+\n+## 增量查询\n \n-只要你按上述方式让Hive工作起来，使用Spark将非常容易。只需启动Spark Shell，如下所示\n+Hudi还提供了获取给定提交时间戳以来已更改的记录流的功能。\n+这可以通过使用Hudi的增量视图并提供开始流进行更改的开始时间来实现。\n+如果我们要在给定的提交之后进行所有更改(这是常见的情况)，则无需指定结束时间。\n \n ```\n-$ cd $SPARK_INSTALL\n-$ spark-shell --jars $HUDI_SRC/packaging/hudi-spark-bundle/target/hudi-spark-bundle-0.4.6-SNAPSHOT.jar --driver-class-path $HADOOP_CONF_DIR  --conf spark.sql.hive.convertMetastoreParquet=false --packages com.databricks:spark-avro_2.11:4.0.0\n+val commits = spark.sql(\"select distinct(_hoodie_commit_time) as commitTime from  hudi_ro_table order by commitTime\").map(k => k.getString(0)).take(50)\n+val beginTime = commits(commits.length - 2) // commit time we are interested in\n \n-scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)\n-scala> sqlContext.sql(\"show tables\").show(10000)\n-scala> sqlContext.sql(\"describe hoodie_test\").show(10000)\n-scala> sqlContext.sql(\"describe hoodie_test_rt\").show(10000)\n-scala> sqlContext.sql(\"select count(*) from hoodie_test\").show(10000)\n+// 增量查询数据\n+val incViewDF = spark.\n+    read.\n+    format(\"org.apache.hudi\").\n+    option(VIEW_TYPE_OPT_KEY, VIEW_TYPE_INCREMENTAL_OPT_VAL).\n+    option(BEGIN_INSTANTTIME_OPT_KEY, beginTime).\n+    load(basePath);\n+incViewDF.registerTempTable(\"hudi_incr_table\")\n+spark.sql(\"select `_hoodie_commit_time`, fare, begin_lon, begin_lat, ts from  hudi_incr_table where fare > 20.0\").show()\n ```\n \n-### Presto {#presto}\n+这将提供在开始时间提交之后发生的所有更改，其中包含票价大于20.0的过滤器。关于此功能的独特之处在于，它现在使您可以在批量数据上创作流式管道。\n \n-Git检出OSS Presto上的 'master' 分支，构建并安装。\n+## 时间查询的关键点\n \n-* 将hudi/packaging/hudi-presto-bundle/target/hudi-presto-bundle-*.jar 复制到 $PRESTO_INSTALL/plugin/hive-hadoop2/\n-* 启动服务器，您应该能够通过Presto查询到相同的Hive表\n+让我们看一下如何查询特定时间的数据。可以通过将结束时间指向特定的提交时间，将开始时间指向\"000\"(表示最早的提交时间)来表示特定时间。\n \n ```\n-show columns from hive.default.hoodie_test;\n-select count(*) from hive.default.hoodie_test\n-```\n+val beginTime = \"000\" // Represents all commits > this time.\n+val endTime = commits(commits.length - 2) // commit time we are interested in\n \n-### 增量 HiveQL\n-\n-现在我们执行一个查询，以获取自上次提交以来已更改的行。\n-\n-```\n-hive> set hoodie.hoodie_test.consume.mode=INCREMENTAL;\n-hive> set hoodie.hoodie_test.consume.start.timestamp=001;\n-hive> set hoodie.hoodie_test.consume.max.commits=10;\n-hive> select `_hoodie_commit_time`, rider, driver from hoodie_test where `_hoodie_commit_time` > '001' limit 10;\n-OK\n-All commits :[001, 002]\n-002\trider-001\tdriver-001\n-002\trider-001\tdriver-001\n-002\trider-002\tdriver-002\n-002\trider-001\tdriver-001\n-002\trider-001\tdriver-001\n-002\trider-002\tdriver-002\n-002\trider-001\tdriver-001\n-002\trider-002\tdriver-002\n-002\trider-002\tdriver-002\n-002\trider-001\tdriver-001\n-Time taken: 0.056 seconds, Fetched: 10 row(s)\n-hive>\n-hive>\n+// 增量查询数据\n+val incViewDF = spark.read.format(\"org.apache.hudi\").\n+    option(VIEW_TYPE_OPT_KEY, VIEW_TYPE_INCREMENTAL_OPT_VAL).\n+    option(BEGIN_INSTANTTIME_OPT_KEY, beginTime).\n+    option(END_INSTANTTIME_OPT_KEY, endTime).\n+    load(basePath);\n+incViewDF.registerTempTable(\"hudi_incr_table\")\n+spark.sql(\"select `_hoodie_commit_time`, fare, begin_lon, begin_lat, ts from  hudi_incr_table where fare > 20.0\").show()\n ```\n \n-> 注意：当前只有读优化视图支持。\n+## 从这开始下一步？\n+这里我们使用Spark演示了Hudi的功能。但是，Hudi可以支持多种存储类型/视图，并且可以从Hive，Spark，Presto等查询引擎中查询Hudi数据集。\n+我们制作了一个基于Docker设置、所有依赖系统都在本地运行的演示视频(https://www.youtube.com/watch?v=VhNgUsxdrD0)，","path":"docs/quickstart.cn.md","position":299,"original_position":299,"commit_id":"da178e7a67bed4adb5ac8b139c526ffba56056df","original_commit_id":"da178e7a67bed4adb5ac8b139c526ffba56056df","user":{"login":"yihua","id":2497195,"node_id":"MDQ6VXNlcjI0OTcxOTU=","avatar_url":"https://avatars2.githubusercontent.com/u/2497195?v=4","gravatar_id":"","url":"https://api.github.com/users/yihua","html_url":"https://github.com/yihua","followers_url":"https://api.github.com/users/yihua/followers","following_url":"https://api.github.com/users/yihua/following{/other_user}","gists_url":"https://api.github.com/users/yihua/gists{/gist_id}","starred_url":"https://api.github.com/users/yihua/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/yihua/subscriptions","organizations_url":"https://api.github.com/users/yihua/orgs","repos_url":"https://api.github.com/users/yihua/repos","events_url":"https://api.github.com/users/yihua/events{/privacy}","received_events_url":"https://api.github.com/users/yihua/received_events","type":"User","site_admin":false},"body":"need square brackets around \"演示视频\" to properly hyperlink it.","created_at":"2019-10-17T05:36:13Z","updated_at":"2019-10-17T05:37:50Z","html_url":"https://github.com/apache/incubator-hudi/pull/959#discussion_r335816110","pull_request_url":"https://api.github.com/repos/apache/incubator-hudi/pulls/959","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/apache/incubator-hudi/pulls/comments/335816110"},"html":{"href":"https://github.com/apache/incubator-hudi/pull/959#discussion_r335816110"},"pull_request":{"href":"https://api.github.com/repos/apache/incubator-hudi/pulls/959"}}},"pull_request":{"url":"https://api.github.com/repos/apache/incubator-hudi/pulls/959","id":328708059,"node_id":"MDExOlB1bGxSZXF1ZXN0MzI4NzA4MDU5","html_url":"https://github.com/apache/incubator-hudi/pull/959","diff_url":"https://github.com/apache/incubator-hudi/pull/959.diff","patch_url":"https://github.com/apache/incubator-hudi/pull/959.patch","issue_url":"https://api.github.com/repos/apache/incubator-hudi/issues/959","number":959,"state":"open","locked":false,"title":"[docs][chinese] sync quickstart.md change to quickstart.cn.md","user":{"login":"leesf","id":10128888,"node_id":"MDQ6VXNlcjEwMTI4ODg4","avatar_url":"https://avatars1.githubusercontent.com/u/10128888?v=4","gravatar_id":"","url":"https://api.github.com/users/leesf","html_url":"https://github.com/leesf","followers_url":"https://api.github.com/users/leesf/followers","following_url":"https://api.github.com/users/leesf/following{/other_user}","gists_url":"https://api.github.com/users/leesf/gists{/gist_id}","starred_url":"https://api.github.com/users/leesf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/leesf/subscriptions","organizations_url":"https://api.github.com/users/leesf/orgs","repos_url":"https://api.github.com/users/leesf/repos","events_url":"https://api.github.com/users/leesf/events{/privacy}","received_events_url":"https://api.github.com/users/leesf/received_events","type":"User","site_admin":false},"body":"This PR sync the changes in the PR [937](https://github.com/apache/incubator-hudi/pull/937) to chinese.\r\n\r\n@yihua PTAL when you get a chance. Thanks.","created_at":"2019-10-16T11:24:37Z","updated_at":"2019-10-17T05:37:49Z","closed_at":null,"merged_at":null,"merge_commit_sha":"d8a77a000e6e191013c38fab112a8bb6ae6d39f1","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/apache/incubator-hudi/pulls/959/commits","review_comments_url":"https://api.github.com/repos/apache/incubator-hudi/pulls/959/comments","review_comment_url":"https://api.github.com/repos/apache/incubator-hudi/pulls/comments{/number}","comments_url":"https://api.github.com/repos/apache/incubator-hudi/issues/959/comments","statuses_url":"https://api.github.com/repos/apache/incubator-hudi/statuses/da178e7a67bed4adb5ac8b139c526ffba56056df","head":{"label":"leesf:quickstart-sync","ref":"quickstart-sync","sha":"da178e7a67bed4adb5ac8b139c526ffba56056df","user":{"login":"leesf","id":10128888,"node_id":"MDQ6VXNlcjEwMTI4ODg4","avatar_url":"https://avatars1.githubusercontent.com/u/10128888?v=4","gravatar_id":"","url":"https://api.github.com/users/leesf","html_url":"https://github.com/leesf","followers_url":"https://api.github.com/users/leesf/followers","following_url":"https://api.github.com/users/leesf/following{/other_user}","gists_url":"https://api.github.com/users/leesf/gists{/gist_id}","starred_url":"https://api.github.com/users/leesf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/leesf/subscriptions","organizations_url":"https://api.github.com/users/leesf/orgs","repos_url":"https://api.github.com/users/leesf/repos","events_url":"https://api.github.com/users/leesf/events{/privacy}","received_events_url":"https://api.github.com/users/leesf/received_events","type":"User","site_admin":false},"repo":{"id":202464627,"node_id":"MDEwOlJlcG9zaXRvcnkyMDI0NjQ2Mjc=","name":"incubator-hudi","full_name":"leesf/incubator-hudi","private":false,"owner":{"login":"leesf","id":10128888,"node_id":"MDQ6VXNlcjEwMTI4ODg4","avatar_url":"https://avatars1.githubusercontent.com/u/10128888?v=4","gravatar_id":"","url":"https://api.github.com/users/leesf","html_url":"https://github.com/leesf","followers_url":"https://api.github.com/users/leesf/followers","following_url":"https://api.github.com/users/leesf/following{/other_user}","gists_url":"https://api.github.com/users/leesf/gists{/gist_id}","starred_url":"https://api.github.com/users/leesf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/leesf/subscriptions","organizations_url":"https://api.github.com/users/leesf/orgs","repos_url":"https://api.github.com/users/leesf/repos","events_url":"https://api.github.com/users/leesf/events{/privacy}","received_events_url":"https://api.github.com/users/leesf/received_events","type":"User","site_admin":false},"html_url":"https://github.com/leesf/incubator-hudi","description":"Upserts And Incremental Processing on Big Data","fork":true,"url":"https://api.github.com/repos/leesf/incubator-hudi","forks_url":"https://api.github.com/repos/leesf/incubator-hudi/forks","keys_url":"https://api.github.com/repos/leesf/incubator-hudi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/leesf/incubator-hudi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/leesf/incubator-hudi/teams","hooks_url":"https://api.github.com/repos/leesf/incubator-hudi/hooks","issue_events_url":"https://api.github.com/repos/leesf/incubator-hudi/issues/events{/number}","events_url":"https://api.github.com/repos/leesf/incubator-hudi/events","assignees_url":"https://api.github.com/repos/leesf/incubator-hudi/assignees{/user}","branches_url":"https://api.github.com/repos/leesf/incubator-hudi/branches{/branch}","tags_url":"https://api.github.com/repos/leesf/incubator-hudi/tags","blobs_url":"https://api.github.com/repos/leesf/incubator-hudi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/leesf/incubator-hudi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/leesf/incubator-hudi/git/refs{/sha}","trees_url":"https://api.github.com/repos/leesf/incubator-hudi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/leesf/incubator-hudi/statuses/{sha}","languages_url":"https://api.github.com/repos/leesf/incubator-hudi/languages","stargazers_url":"https://api.github.com/repos/leesf/incubator-hudi/stargazers","contributors_url":"https://api.github.com/repos/leesf/incubator-hudi/contributors","subscribers_url":"https://api.github.com/repos/leesf/incubator-hudi/subscribers","subscription_url":"https://api.github.com/repos/leesf/incubator-hudi/subscription","commits_url":"https://api.github.com/repos/leesf/incubator-hudi/commits{/sha}","git_commits_url":"https://api.github.com/repos/leesf/incubator-hudi/git/commits{/sha}","comments_url":"https://api.github.com/repos/leesf/incubator-hudi/comments{/number}","issue_comment_url":"https://api.github.com/repos/leesf/incubator-hudi/issues/comments{/number}","contents_url":"https://api.github.com/repos/leesf/incubator-hudi/contents/{+path}","compare_url":"https://api.github.com/repos/leesf/incubator-hudi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/leesf/incubator-hudi/merges","archive_url":"https://api.github.com/repos/leesf/incubator-hudi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/leesf/incubator-hudi/downloads","issues_url":"https://api.github.com/repos/leesf/incubator-hudi/issues{/number}","pulls_url":"https://api.github.com/repos/leesf/incubator-hudi/pulls{/number}","milestones_url":"https://api.github.com/repos/leesf/incubator-hudi/milestones{/number}","notifications_url":"https://api.github.com/repos/leesf/incubator-hudi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/leesf/incubator-hudi/labels{/name}","releases_url":"https://api.github.com/repos/leesf/incubator-hudi/releases{/id}","deployments_url":"https://api.github.com/repos/leesf/incubator-hudi/deployments","created_at":"2019-08-15T03:05:44Z","updated_at":"2019-10-16T11:28:08Z","pushed_at":"2019-10-16T11:28:06Z","git_url":"git://github.com/leesf/incubator-hudi.git","ssh_url":"git@github.com:leesf/incubator-hudi.git","clone_url":"https://github.com/leesf/incubator-hudi.git","svn_url":"https://github.com/leesf/incubator-hudi","homepage":"https://hudi.apache.org","size":8905,"stargazers_count":0,"watchers_count":0,"language":"Java","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":0,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"apache:asf-site","ref":"asf-site","sha":"c0a66420f63aa987893d3e202eaa6fcf473ea27b","user":{"login":"apache","id":47359,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ3MzU5","avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"repo":{"id":76474200,"node_id":"MDEwOlJlcG9zaXRvcnk3NjQ3NDIwMA==","name":"incubator-hudi","full_name":"apache/incubator-hudi","private":false,"owner":{"login":"apache","id":47359,"node_id":"MDEyOk9yZ2FuaXphdGlvbjQ3MzU5","avatar_url":"https://avatars0.githubusercontent.com/u/47359?v=4","gravatar_id":"","url":"https://api.github.com/users/apache","html_url":"https://github.com/apache","followers_url":"https://api.github.com/users/apache/followers","following_url":"https://api.github.com/users/apache/following{/other_user}","gists_url":"https://api.github.com/users/apache/gists{/gist_id}","starred_url":"https://api.github.com/users/apache/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/apache/subscriptions","organizations_url":"https://api.github.com/users/apache/orgs","repos_url":"https://api.github.com/users/apache/repos","events_url":"https://api.github.com/users/apache/events{/privacy}","received_events_url":"https://api.github.com/users/apache/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/apache/incubator-hudi","description":"Upserts And Incremental Processing on Big Data","fork":false,"url":"https://api.github.com/repos/apache/incubator-hudi","forks_url":"https://api.github.com/repos/apache/incubator-hudi/forks","keys_url":"https://api.github.com/repos/apache/incubator-hudi/keys{/key_id}","collaborators_url":"https://api.github.com/repos/apache/incubator-hudi/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/apache/incubator-hudi/teams","hooks_url":"https://api.github.com/repos/apache/incubator-hudi/hooks","issue_events_url":"https://api.github.com/repos/apache/incubator-hudi/issues/events{/number}","events_url":"https://api.github.com/repos/apache/incubator-hudi/events","assignees_url":"https://api.github.com/repos/apache/incubator-hudi/assignees{/user}","branches_url":"https://api.github.com/repos/apache/incubator-hudi/branches{/branch}","tags_url":"https://api.github.com/repos/apache/incubator-hudi/tags","blobs_url":"https://api.github.com/repos/apache/incubator-hudi/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/apache/incubator-hudi/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/apache/incubator-hudi/git/refs{/sha}","trees_url":"https://api.github.com/repos/apache/incubator-hudi/git/trees{/sha}","statuses_url":"https://api.github.com/repos/apache/incubator-hudi/statuses/{sha}","languages_url":"https://api.github.com/repos/apache/incubator-hudi/languages","stargazers_url":"https://api.github.com/repos/apache/incubator-hudi/stargazers","contributors_url":"https://api.github.com/repos/apache/incubator-hudi/contributors","subscribers_url":"https://api.github.com/repos/apache/incubator-hudi/subscribers","subscription_url":"https://api.github.com/repos/apache/incubator-hudi/subscription","commits_url":"https://api.github.com/repos/apache/incubator-hudi/commits{/sha}","git_commits_url":"https://api.github.com/repos/apache/incubator-hudi/git/commits{/sha}","comments_url":"https://api.github.com/repos/apache/incubator-hudi/comments{/number}","issue_comment_url":"https://api.github.com/repos/apache/incubator-hudi/issues/comments{/number}","contents_url":"https://api.github.com/repos/apache/incubator-hudi/contents/{+path}","compare_url":"https://api.github.com/repos/apache/incubator-hudi/compare/{base}...{head}","merges_url":"https://api.github.com/repos/apache/incubator-hudi/merges","archive_url":"https://api.github.com/repos/apache/incubator-hudi/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/apache/incubator-hudi/downloads","issues_url":"https://api.github.com/repos/apache/incubator-hudi/issues{/number}","pulls_url":"https://api.github.com/repos/apache/incubator-hudi/pulls{/number}","milestones_url":"https://api.github.com/repos/apache/incubator-hudi/milestones{/number}","notifications_url":"https://api.github.com/repos/apache/incubator-hudi/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/apache/incubator-hudi/labels{/name}","releases_url":"https://api.github.com/repos/apache/incubator-hudi/releases{/id}","deployments_url":"https://api.github.com/repos/apache/incubator-hudi/deployments","created_at":"2016-12-14T15:53:41Z","updated_at":"2019-10-17T04:12:03Z","pushed_at":"2019-10-17T05:29:48Z","git_url":"git://github.com/apache/incubator-hudi.git","ssh_url":"git@github.com:apache/incubator-hudi.git","clone_url":"https://github.com/apache/incubator-hudi.git","svn_url":"https://github.com/apache/incubator-hudi","homepage":"https://hudi.apache.org","size":8968,"stargazers_count":695,"watchers_count":695,"language":"Java","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":241,"mirror_url":null,"archived":false,"disabled":false,"open_issues_count":37,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":241,"open_issues":37,"watchers":695,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/apache/incubator-hudi/pulls/959"},"html":{"href":"https://github.com/apache/incubator-hudi/pull/959"},"issue":{"href":"https://api.github.com/repos/apache/incubator-hudi/issues/959"},"comments":{"href":"https://api.github.com/repos/apache/incubator-hudi/issues/959/comments"},"review_comments":{"href":"https://api.github.com/repos/apache/incubator-hudi/pulls/959/comments"},"review_comment":{"href":"https://api.github.com/repos/apache/incubator-hudi/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/apache/incubator-hudi/pulls/959/commits"},"statuses":{"href":"https://api.github.com/repos/apache/incubator-hudi/statuses/da178e7a67bed4adb5ac8b139c526ffba56056df"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"yihua"}}