返回 首页

Logica 教程

开始阅读
教程说明:

什么是Logica?

Logica 是一种用于数据操作的开源声明式逻辑编程语言。Logica 是 Yedalog(Yedalog)的继承者, Yedalog 是 Google 之前创建的一种语言。

为什么?

Logica 适用于希望在编写查询和管道以在 BigQuery 上运行时使用逻辑编程语法的工程师,数据科学家和其他专家 。

Logica 可以编译为 SQL,并借助逻辑编程语法的便利性使您可以使用 Google BigQuery 引擎的功能。这是有用的,因为 BigQuery 比现有的本机逻辑编程引擎更强大。

我们鼓励您尝试 Logica,尤其是在以下情况下

  • 您已经使用逻辑编程并且需要更多的计算能力,或者
  • 您使用 SQL,但对它的可读性不满意,或者
  • 您想学习逻辑编程并将其应用于大数据处理。

将来,我们计划支持更多的 SQL 方言和引擎。

我还没有听说过逻辑编程。它是什么?

逻辑编程是一种声明式编程范例,其中程序被编写为一组逻辑语句。

逻辑编程是从 60 年代后期开始在学术界开发的。Prolog 和 Datalog 是逻辑编程语言最突出的示例。Logica 是 Datalog 家族的一种语言。

数据记录和关系数据库从同一思想开始:将数据视为关系,并将数据操纵视为对这些关系的一系列操作。但是,Datalog 和 SQL 在描述这些操作的方式上有所不同。Datalog 受到一阶命题逻辑的数学语法的启发,而SQL遵循自然语言的语法。

SQL 基于自然语言,无需经过计算机编程或数学方面的正式培训即可向人们提供数据库访问权限。当您要表达的逻辑不平凡时,这种便利可能会变得很昂贵。有许多与简单逻辑程序相对应的难以理解的SQL查询示例。

Logica如何工作?

Logica 将逻辑程序编译为 SQL 表达式,因此可以在 BigQuery(最新的 SQL 引擎)上执行。

在数据库理论家中,众所周知 Datalog 和 SQL 是等效的。实际上,从 Datalog 到 SQL 的转换通常很简单。但是,有一些细微差别,例如如何处理析取和否定。在 Logica 中,我们尝试做出各种选择,以尽可能简化对结果 SQL 结构的理解,从而使用户能够编写高效执行的程序。

为什么叫Logica?

Logica 代表具有聚合的逻辑( Logic with ggregation)。

如何学习?

通过位于文件夹中的 CoLab 教程,了解 Logica 的基础知识 tutorial。请参阅在 examples 文件夹中使用 Logica 的示例。

教程和示例显示了如何从 CoLab 访问 Logica。您也可以安装 Logica 命令行工具。

先决条件

要在 BigQuery 上运行 Logica 程序,您将需要一个 Google Cloud Project。拥有项目后,您可以在 CoLab 中运行 Logica 程序,并提供您的项目 ID。

要在本地运行 Logica,您需要 Python3

要从您需要的命令行启动 Logica 谓词执行,这 bq 是一个 BigQuery 命令行工具。为此,您需要安装 Google Cloud SDK。

安装

您仅需要 Google Cloud Project 在 Colab 中运行 Logica,请参阅 Hello World 示例。

您可以使用 pip 以下命令安装 Logica 命令。

# Install.
python3 -m pip install logica
# Run:
# To see usage message.
python3 -m logica
# To print SQL for HelloWorld program.
python3 -m logica - print Greet <<<'Greet(greeting: "Hello world!")'

如果您 PATH 包含 Python 的 bin 文件夹,那么您也可以像这样简单地运行它

logica - print Greet <<<'Greet(greeting: "Hello world!")'

或者,您可以克隆 GitHub 存储库:

git clone https://github.com/evgskv/logica
cd logica
./logica - print Greet <<<'Greet(greeting: "Hello world!")'

代码样本

这里有一些 Logica 代码的示例。

质数

查找小于 30 的质数。

程序 primes.l:

# Define natural numbers from 1 to 29.
N(x) :- x in Range(30);
# Define primes.
Prime(prime: x) :-
  N(x),
  x > 1,
  ~(
    N(y),
    y > 1,
    y != x,
    Mod(x, y) == 0
  );

跑步 primes.l

$ logica primes.l run Prime
+-------+
| prime |
+-------+
|     2 |
|     3 |
|     5 |
|     7 |
|    11 |
|    13 |
|    17 |
|    19 |
|    23 |
|    29 |
+-------+

新闻提及

2020 年新闻中最被提及的人是谁?让我们查询 GDELT Project 数据集。

程序 mentions.l

@OrderBy(Mentions, "mentions desc");
@Limit(Mentions, 10);
Mentions(person:, mentions? += 1) distinct :-
  gdelt-bq.gdeltv2.gkg(persons:, date:),
  Substr(ToString(date), 0, 4) == "2020",
  the_persons == Split(persons, ";"),
  person in the_persons;

跑步 mentions.l

$ logica mentions.l run Mentions
+----------------+----------+
|     person     | mentions |
+----------------+----------+
| donald trump   |  3624228 |
| joe biden      |  1591320 |
| los angeles    |  1221998 |
| george floyd   |   923472 |
| boris johnson  |   845955 |
| barack obama   |   541672 |
| vladimir putin |   486428 |
| bernie sanders |   409224 |
| andrew cuomo   |   375594 |
| nancy pelosi   |   375373 |
+----------------+----------+

请注意,由于 GDELT 数据分析中已知的误分类问题,此表中提到了洛杉矶和拉斯维加斯等城市。

反馈

随意 为错误和功能请求创建 github 问题。

欢迎在我们的 github 讨论中提出您的问题和意见!

除非另有说明,否则 Logica 源文件是根据 LICENSE 文件中的 Apache 2.0 许可证分发的。

这不是官方支持的 Google 产品。


温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录
Logica 语法

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }