<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: RogerWoods</title>
    <description>The latest articles on DEV Community by RogerWoods (@rogerwoods).</description>
    <link>https://dev.to/rogerwoods</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1147014%2F9ece40bd-b385-40c5-86c6-a68a9146b2ca.png</url>
      <title>DEV Community: RogerWoods</title>
      <link>https://dev.to/rogerwoods</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rogerwoods"/>
    <language>en</language>
    <item>
      <title>How proficient is generated AI in transforming text or natural language into SQL?</title>
      <dc:creator>RogerWoods</dc:creator>
      <pubDate>Sat, 16 Dec 2023 15:02:00 +0000</pubDate>
      <link>https://dev.to/rogerwoods/how-proficient-is-generated-ai-in-transforming-text-or-natural-language-into-sql-3i5d</link>
      <guid>https://dev.to/rogerwoods/how-proficient-is-generated-ai-in-transforming-text-or-natural-language-into-sql-3i5d</guid>
      <description>&lt;p&gt;SQL, as the most important standard syntax in the field of data analysis, has been widely applied by people. Every developer, data engineer, and database administrator must learn SQL in order to interact with databases. Although SQL is not a very difficult syntax, it involves many details. Most developers may struggle with simple Join and feel hard to write high-quality and efficient SQL statements.&lt;/p&gt;

&lt;p&gt;Whether you believe it or not, with the advent of Large Language models like ChatGPT, generating accurate SQL through natural language may make SQL writing less crucial. I dare not say that AI will make SQL disappear, but it will at least relieve people from the agony of meticulously crafting every syntax, saving a significant amount of time, especially for programmers who are not proficient in writing SQL. Let me show you some examples what AI can do now.&lt;/p&gt;

&lt;h3&gt;
  
  
  Start From Create Table and Add Data
&lt;/h3&gt;

&lt;p&gt;First of all, you need to have a clear idea of the table and fields you want to create. You can ask GPT for some suggestions, but often in our daily production systems, we already have an idea of the structure of the table. Let's take the example of student school performance. We need tables look like this.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Table Student&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;student_number&lt;/th&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;birthday&lt;/th&gt;
&lt;th&gt;gender&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0001&lt;/td&gt;
&lt;td&gt;Jhon&lt;/td&gt;
&lt;td&gt;1995-06-04&lt;/td&gt;
&lt;td&gt;male&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Table Course&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;course_number&lt;/th&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;th&gt;teacher_number&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0001&lt;/td&gt;
&lt;td&gt;Math&lt;/td&gt;
&lt;td&gt;0002&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Table Score&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;student_number&lt;/th&gt;
&lt;th&gt;course_number&lt;/th&gt;
&lt;th&gt;score&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0001&lt;/td&gt;
&lt;td&gt;0001&lt;/td&gt;
&lt;td&gt;90&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Table Teacher&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;teacher_number&lt;/th&gt;
&lt;th&gt;name&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;0001&lt;/td&gt;
&lt;td&gt;William&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Hard to write so many field name and create data. Well, let GPT help us.&lt;br&gt;
just type:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;create two tables for me: student with student_num, name, birthday and gender. course with course number, name and teacher number 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The description seems not so accurate, but the result is very good. It can even choose the field type, char length for you.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bhsvVDFM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1lorxls3bv8z3uk78560.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bhsvVDFM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1lorxls3bv8z3uk78560.png" alt="createtable" width="800" height="401"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, we generate another two tables with the same plain sentence. But a small amazing thing still shocks me: in the table &lt;strong&gt;Score&lt;/strong&gt;, it uses student_number and course_number as union primary key! How does it know this?&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Pxr0VHkL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mubgyjctvkn7q7h75dop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Pxr0VHkL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mubgyjctvkn7q7h75dop.png" alt="createattable" width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As a test table, I should create some data and insert them into the tables. It is too hard and annoying to create so many names, ages, scores and so on. Don't worry, we can still use AI to do this though people seldom use this function in production environment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;fake about 20 data randomly for all the for tables for me, and make the data is correlated
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sWEOLk5c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/drzgs5s0hajsldd6nlsq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sWEOLk5c--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/drzgs5s0hajsldd6nlsq.png" alt="fakedata" width="800" height="502"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WufLWFHD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0lw9n6dweb2wk0jtljq0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WufLWFHD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0lw9n6dweb2wk0jtljq0.png" alt="fakedata2" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wow, we have table and data now. Let's do something with the table.&lt;/p&gt;

&lt;h3&gt;
  
  
  Basic Data Query
&lt;/h3&gt;

&lt;p&gt;Firstly let's just see all the data of one table, so easy right?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;show student data for me
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZErtDwWw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6l3dxjaveahpc736l3db.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZErtDwWw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6l3dxjaveahpc736l3db.png" alt="show" width="800" height="384"&gt;&lt;/a&gt;&lt;br&gt;
No surprising, it can certainly show the right result. OK, add some diffculty, let him give us a fuzzy query.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;show teacher name endwith n
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--kDwnSQf1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e86y5q6y25sse03slk5w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--kDwnSQf1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e86y5q6y25sse03slk5w.png" alt="like" width="800" height="567"&gt;&lt;/a&gt;&lt;br&gt;
Clearly using the key word "like".&lt;/p&gt;
&lt;h3&gt;
  
  
  Complex Data Query with Multiple tables
&lt;/h3&gt;

&lt;p&gt;Maybe just query one table is not so hard, then let me try some complex syntax. First, choose the tables you want to query with the software instead of all the database. And write sentence that should use multiple talbes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;calculate all the average score of students and tell me the students name whose scroe is large than 60
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sK6Xf_mw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/arw1228k80uyr9exn63j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sK6Xf_mw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/arw1228k80uyr9exn63j.png" alt="avg" width="800" height="869"&gt;&lt;/a&gt;&lt;br&gt;
AI exactly uses the key word of Join, Group by, Having and function AVG to return thc correct results.&lt;br&gt;
Then I want to try an inline query.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;query all the students name number whose courses score are all under 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hYzBiNLw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fjook34vhw5fosd2ecun.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hYzBiNLw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fjook34vhw5fosd2ecun.png" alt="allscore" width="800" height="695"&gt;&lt;/a&gt;&lt;br&gt;
No doubt, inline query is shown here. But why it use "NOT IN" instead IN? Let's check with AI. By asking it to optimize the sql for me. Well it now uses "IN" and add a judgement of NULL value. So the choice of AI may be short first~&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I-Gs5nQ_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ricwi3dvw10puudvjzmx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I-Gs5nQ_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ricwi3dvw10puudvjzmx.png" alt="aiin" width="800" height="975"&gt;&lt;/a&gt;&lt;br&gt;
Let's see some thing more complex.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;query all the students who has not learned all the courses
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SeYYnKFX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5stxcmm56gfxw46kg3eh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SeYYnKFX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/5stxcmm56gfxw46kg3eh.png" alt="allcourses" width="800" height="741"&gt;&lt;/a&gt;&lt;br&gt;
Wow, it's hard for most people to write such code.&lt;/p&gt;
&lt;h3&gt;
  
  
  Use of Function
&lt;/h3&gt;

&lt;p&gt;As we can see it uses some function such as AVG above to generate results you want, it can use more functions. For example,&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;query all students ages by year
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0jI3xhGv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qdk2bxn0i27t8okscxu5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0jI3xhGv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qdk2bxn0i27t8okscxu5.png" alt="date" width="800" height="741"&gt;&lt;/a&gt;&lt;br&gt;
We can see it uses the function of TIMESTAMPDIFF. Then let me ask him something complex.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ranking the students scores by the course number and show course numbers, student number, score and ranking number.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--e3Drk5dl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ygp776w22bqbluovs37w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--e3Drk5dl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ygp776w22bqbluovs37w.png" alt="ranking" width="800" height="938"&gt;&lt;/a&gt;&lt;br&gt;
Wow, Wow, Wow! Do you see the use of ROW_NUMBER() and OVER key word? Can you write out sql like this?&lt;/p&gt;

&lt;p&gt;Many people will doubt the ability of generated AI before using it as I was before. But after I use it more and more, it gives me more surprise.&lt;/p&gt;

&lt;p&gt;Tips:The examples above is written with a software called &lt;a href="https://tablechatai.com/"&gt;TableChat&lt;/a&gt; , it can generate SQL according to you table structure and run to return to see the results.&lt;/p&gt;

</description>
      <category>developers</category>
      <category>dataengineering</category>
      <category>ai</category>
      <category>database</category>
    </item>
    <item>
      <title>Why do we still need to create an NL2SQL product?</title>
      <dc:creator>RogerWoods</dc:creator>
      <pubDate>Fri, 08 Dec 2023 09:07:16 +0000</pubDate>
      <link>https://dev.to/rogerwoods/why-do-we-still-need-to-create-an-nl2sql-product-g8h</link>
      <guid>https://dev.to/rogerwoods/why-do-we-still-need-to-create-an-nl2sql-product-g8h</guid>
      <description>&lt;p&gt;The concept of NL2SQL exists long before the popularity of large language models（LLMs）. Instead of being called NL2SQL, it also has other names such as Text2SQL and AI2SQL. This concept is not rare, and there are many products with similar concept. So, why do we still decide to create &lt;a href="https://tablechatai.com/"&gt;TableChat&lt;/a&gt;, an AI generated based SQL IDE tool？&lt;/p&gt;

&lt;h2&gt;
  
  
  LLMs is Coming
&lt;/h2&gt;

&lt;p&gt;In the pre-era of LLMs, people use algorithms like word segmentation and RNN to process and understand queries. They build Q&amp;amp;A systems through knowledge graph to answer specific questions. However, these approaches need special keywords in queries, such as fields related to the database table structure. These products result in poor performance in search coverage, accuracy, and generated results, severely limiting the widespread adoption of such products. With the advent of large language models like ChatGPT and other generative AI models, it has a significant improvement in the ability to understand queries and generate contents. This has greatly enhanced the usability of such products.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W8BTPTt_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ngik8ytfo61chpe7v4u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W8BTPTt_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ngik8ytfo61chpe7v4u.png" alt="Image description" width="800" height="487"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why don't we use ChatGPT?
&lt;/h2&gt;

&lt;p&gt;Given the effectiveness of ChatGPT, why do not we just  directly use ChatGPT or even build a GPTs to address our SQL statement generation problem? Why do we need a specific product? Yes, after the emergence of LLMs, many products immediately utilize the capabilities of GPT to assist users in generating SQL. The general appearance of these products is as follows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rzmG1yoS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fqa333bdatiflokqf7uu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rzmG1yoS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fqa333bdatiflokqf7uu.png" alt="Image description" width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;These products remain the form of conversation and chatting, they just send some conversational context to GPT. Users can only get standard SQL query-related statements, just like a ChatGPT shell. Because there is no incorporation with the user's table schema, the generated SQL cannot be directly used. To use these statements, I need to spend a considerable amount of time switching between my IDE and GPT. What's more, what we need is not only sql generation but also total features of handle database. Moreover, we are all quite fed up with these dialogue boxes, aren't we?&lt;/p&gt;

&lt;h2&gt;
  
  
  What we aim to do
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;TableChat is still an IDE, but it's a super intelligent editor. AI capability is essential for us, but AI doesn‘t mean all. &lt;/li&gt;
&lt;li&gt;We correlate LLMs with database schemas to obtain production-ready SQL statements. &lt;/li&gt;
&lt;li&gt;We don't create traditional SQL IDEs with numerous features that are rarely used. We only develop the most essential features. &lt;/li&gt;
&lt;li&gt;Our goal is not just for database development, we also aim to understand and visualize data better. People don't need to put everything into Excel for visualization anymore. &lt;/li&gt;
&lt;li&gt;We are not only targeted to database engineers but to all developers, including database administrators, data engineers, and backend developers. Therefore, our product will not only include database management but also database-related code generation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VcoZz5GV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ff6mhj747r50ogsrjb8y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VcoZz5GV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ff6mhj747r50ogsrjb8y.png" alt="Image description" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What we have already done
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Text2SQL generation&lt;/li&gt;
&lt;li&gt;SQL editing, executing, and AI debugging &lt;/li&gt;
&lt;li&gt;Data insights&lt;/li&gt;
&lt;li&gt;Database-related code generation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is what we look like now:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--srm_SyKE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tngspaxo5z4bnufu7hny.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--srm_SyKE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/tngspaxo5z4bnufu7hny.png" alt="Image description" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://tablechatai.com/"&gt;TableChat&lt;/a&gt; is just starting, and there is much more to be done. Welcome everyone to experience and use our product, we appreciate any feedback!&lt;/p&gt;

</description>
      <category>database</category>
      <category>dataengineering</category>
      <category>developers</category>
      <category>ai</category>
    </item>
    <item>
      <title>Data Analysis with ChatGPT Plugin Noteable</title>
      <dc:creator>RogerWoods</dc:creator>
      <pubDate>Sun, 12 Nov 2023 14:55:44 +0000</pubDate>
      <link>https://dev.to/rogerwoods/data-analysis-with-chatgpt-plugin-noteable-5b32</link>
      <guid>https://dev.to/rogerwoods/data-analysis-with-chatgpt-plugin-noteable-5b32</guid>
      <description>&lt;p&gt;The Noteable ChatGPT plugin is a third-party ChatGPT plugin developed by the collaborative data notebook platform &lt;a href="http://noteable.io/"&gt;Noteable.io&lt;/a&gt;. This plugin seamlessly integrates the natural language processing capabilities of ChatGPT with data notebooks (similar to Jupyter Notebooks) that allow users to create and share documents containing real-time code, equations, visualizations, and annotated text. It finds extensive applications in areas such as data cleaning and transformation, data analysis, numerical simulation, statistical modeling, data visualization, and machine learning.&lt;/p&gt;

&lt;p&gt;With the Notable ChatGPT plugin, users can command ChatGPT through conversation to load datasets, perform exploratory data analysis, create visualizations, run machine learning models, and more—all within the collaborative Jupyter notebook environment that can be shared with others.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Installing the Notable Plugin&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ensure that you have the paid version of ChatGPT, ChatGPT Plus, to use ChatGPT4 and install plugins.&lt;/li&gt;
&lt;li&gt;Visit the ChatGPT plugin store and search for the "Notable" plugin to install.&lt;/li&gt;
&lt;li&gt;After clicking the "Install" button, a login page for your Notable account will appear. Connect your Notable account to ChatGPT. If the login page doesn't appear, you can visit Notable.io and register for a free account.&lt;/li&gt;
&lt;li&gt;Once your Notable account is created, the Noteable plugin will be automatically activated, and the Noteable logo will appear below the button to select the GPT version.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ln6KkiP4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1i2lr28mr94jsckpi3um.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ln6KkiP4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1i2lr28mr94jsckpi3um.png" alt="Installed" width="702" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Creating a Noteable Project&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to Noteable, click the "Create" button, and create a project.&lt;/li&gt;
&lt;li&gt;Name the project and copy the URL link, then pass it to your ChatGPT following the provided instructions.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_joF2qfk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hipd00vp4zdr4m13bfdy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_joF2qfk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hipd00vp4zdr4m13bfdy.png" alt="creating" width="697" height="574"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Importing Data&lt;/strong&gt; &lt;br&gt;
Noteable allows users to easily import data from various sources into notebooks, including uploading CSV files, Excel spreadsheets, and connecting to databases like Postgres and MySQL. In the example, the Titanic dataset is imported.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--o9COZnlw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mmh4kxi7per3kkfdyygr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--o9COZnlw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mmh4kxi7per3kkfdyygr.png" alt="Imported" width="606" height="69"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPT Analysis&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automated EDA Analysis:&lt;/strong&gt; ChatGPT can perform exploratory data analysis (EDA) to provide an overview of the dataset.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mTIYevea--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sjfmta6390d7pw6gzujj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mTIYevea--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sjfmta6390d7pw6gzujj.png" alt="EDA" width="593" height="767"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code Generation:&lt;/strong&gt; Generated code for the EDA analysis is automatically visible in the Noteable project.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HhCDGxdP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2uaudm0nvym5d8vxsqof.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HhCDGxdP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2uaudm0nvym5d8vxsqof.png" alt="CodeGenerated" width="694" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performing Additional Data Analysis&lt;/strong&gt; &lt;br&gt;
If needed, users can continue the analysis in ChatGPT. For example, ChatGPT can be asked to provide a machine learning model for predicting survivors.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6W9dQH-Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qrn0cy2kupmd2b57u7wc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6W9dQH-Y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/qrn0cy2kupmd2b57u7wc.png" alt="DataAnalysis" width="606" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This interactive language-based approach enables the automation of various data analysis tasks, including data analysis, machine learning, visualization, model generation, and even web scraping within the Noteable environment.&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>dataengineering</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Different Type of Data Integration Tools People Use</title>
      <dc:creator>RogerWoods</dc:creator>
      <pubDate>Fri, 10 Nov 2023 15:53:54 +0000</pubDate>
      <link>https://dev.to/rogerwoods/different-type-of-data-integration-tools-people-use-oob</link>
      <guid>https://dev.to/rogerwoods/different-type-of-data-integration-tools-people-use-oob</guid>
      <description>&lt;p&gt;Data integration technology has rapidly iterated along with the development of the big data technology stack. It has evolved from early offline data integration to gradually include real-time data integration, giving rise to an increasing number of excellent products.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Offline BigData Integration&lt;/em&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  SQOOP
&lt;/h3&gt;

&lt;p&gt;Apache SQOOP is a specialized tool that facilitates seamless data transfer between HDFS and various structured data repositories. These repositories could include relational databases, enterprise data warehouses, and NoSQL systems. SQOOP operates through a connector architecture, which employs plugins to enhance data connections with external systems, ensuring efficient data migration. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vS2EQ8v6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mstrw3fov7gh0nzy4uls.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vS2EQ8v6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mstrw3fov7gh0nzy4uls.png" alt="sqoop" width="585" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Datax
&lt;/h3&gt;

&lt;p&gt;DataX is a widely used offline data synchronization tool/platform within Alibaba, which practically achieves the extension of all common data storage. It supports data synchronization between various heterogeneous data sources. DataX, as an offline data synchronization framework, adopts a Framework + plugin architecture. It abstracts data source reading and writing into Reader/Writer plugins, incorporating them into the entire synchronization framework.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T17wAFBz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/07b16hute1jysqzur8jv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T17wAFBz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/07b16hute1jysqzur8jv.png" alt="datax" width="800" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Real-time incremental data integration&lt;/em&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Canal
&lt;/h3&gt;

&lt;p&gt;Its primary purpose is based on parsing incremental logs from MySQL databases, providing incremental data subscription and consumption. Currently, it supports MySQL versions including 5.1.x, 5.5.x, 5.6.x, 5.7.x, and 8.0.x.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Asxm4gkX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2cbyl85aykhyygf6km93.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Asxm4gkX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2cbyl85aykhyygf6km93.png" alt="canal" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  FlinkCDC
&lt;/h3&gt;

&lt;p&gt;In traditional CDC-based ETL analysis, the process involves first collecting data, then relying on an external message queue (MQ) for data delivery, performing calculations after downstream consumption, and finally storing the data. The overall data pipeline is relatively long. The core concept of FlinkCDC is to simplify the data pipeline by integrating Debezium for binlog collection at the lower level, eliminating the need for an MQ, and ultimately performing calculations through Flink. The entire pipeline is based on the Flink ecosystem, providing a clearer structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--T4S3wZq4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lzj05pc6xux4dqy25jm1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--T4S3wZq4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lzj05pc6xux4dqy25jm1.png" alt="flinkcdc" width="800" height="444"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;em&gt;New Real-time data integration&lt;/em&gt;&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Airbyte
&lt;/h3&gt;

&lt;p&gt;Airbyte is an open-source data integration engine that enables the rapid construction of a reliable data pipeline (supporting Change Data Capture - CDC) in a matter of minutes. It facilitates integration and synchronization from source to destination, encompassing data from databases, data warehouses, and data lakes. Airbyte, grounded in a modern understanding of Extract, Load, and focusing on the Extract and Load phases, delegates transformation operations to dbt. Its robust open-source ecosystem supports 200+ connectors, with ongoing additions according to the product development roadmap.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qdhBliAu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hcn66lpg7e13n63z7ce6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qdhBliAu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/hcn66lpg7e13n63z7ce6.png" alt="airbytes" width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Fivetran
&lt;/h3&gt;

&lt;p&gt;Fivetran connects to all of your supported data sources and loads the data from them into your destination. Each data source has one or more connectors that run as independent processes that persist for the duration of one update. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--tM0l5HXF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jm21y0j2kmrenyevz34n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--tM0l5HXF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jm21y0j2kmrenyevz34n.png" alt="fivetrans" width="800" height="912"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are many different eras of big data integration products, including &lt;strong&gt;Debezium, Maxwell, Flinkx, SeaTunnel, Stitch, Singer, Meltano&lt;/strong&gt;, there is no absolute 'best' option; it depends on specific use cases and requirements. Each product has its unique features, applicable scope, and strengths. Users should choose based on their specific data integration needs, technology stack, and preferences.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AutoGPT gives up vector databases, Do we still need them？</title>
      <dc:creator>RogerWoods</dc:creator>
      <pubDate>Thu, 09 Nov 2023 03:17:59 +0000</pubDate>
      <link>https://dev.to/rogerwoods/autogpt-gives-up-vector-databases-do-we-still-need-them--58ga</link>
      <guid>https://dev.to/rogerwoods/autogpt-gives-up-vector-databases-do-we-still-need-them--58ga</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rmnTEyUl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rur6d1f48x8qmps95zc4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rmnTEyUl--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rur6d1f48x8qmps95zc4.png" alt="vector database" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Generative AI has driven the popularity of vector databases, but the technological landscape seems to be changing rapidly. As one of the world's most renowned AI projects, AutoGPT has announced its decision to no longer utilize vector databases, a move that may come as a surprise to many. After all, from the outset, vector databases have consistently supported the long-term memory of AI agents.&lt;/p&gt;

&lt;p&gt;Why has this fundamental design approach changed? What new solution is set to replace it? Are vector databases essential for large-scale model applications?&lt;/p&gt;

&lt;h3&gt;
  
  
  AutoGPT gives up vector database
&lt;/h3&gt;

&lt;p&gt;AutoGPT, released on March 30th this year as an 'AI agent', similar to LlamaIndex and LangChain, made a significant impact immediately after its launch. Within just 7 days of going live, it garnered 44,000 stars on GitHub. In contrast to the conventional method of repeatedly feeding prompt words into models, AutoGPT can autonomously work, plan tasks, break down problems into smaller components, and execute them individually. Undoubtedly, it's an ambitious initiative.&lt;/p&gt;

&lt;p&gt;The design concept of AutoGPT involved a method of managing an AI agent's memory in an embedded format, along with a set of vector databases for storing and retrieving memories when necessary. From that perspective, the vector databases were considered a crucial part of the entire solution. Moreover, other Artificial General Intelligence (AGI) projects have also adopted similar methods, such as BabyAGI.&lt;/p&gt;

&lt;p&gt;Initially, AutoGPT supported five storage modes by default:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;LocalCache (renamed to JSONFileMemory)&lt;/li&gt;
&lt;li&gt;Redis&lt;/li&gt;
&lt;li&gt;Milvus&lt;/li&gt;
&lt;li&gt;Pinecone&lt;/li&gt;
&lt;li&gt;Weaviate&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, reviewing AutoGPT's documentation now reveals a surprising warning:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rQQr4gfu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/59zsvd6cisb08jtavgxt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rQQr4gfu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/59zsvd6cisb08jtavgxt.png" alt="Warning" width="640" height="214"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AutoGPT has recently undergone a 'Vector Memory Refactor,' removing all vector database implementations, including Milvus, Pinecone, Weaviate, retaining only a few classes responsible for memory management. Presently, JSON files have become the default method for storing memories/embeddings.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Maintainer Reinier van der Leer in May this year raised a query on GitHub regarding opinions on the 'value of adding different storage modes.' They were contemplating a refactor and intended to discard everything except the 'local' memory provider (now known as json_file) while striving to implement Redis VectorMemoryProvider.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sn1ZRNry--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d06kvq31gxns5u3eixha.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sn1ZRNry--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/d06kvq31gxns5u3eixha.png" alt="Opinion" width="640" height="64"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Some developers expressed agreement, suggesting that if the backend is good enough, there's no reason to retain these vector databases. 'But I suggest integrating Pinecone (or Redis if it's advantageous) into a customized JSONFileMemory.'&lt;/p&gt;

&lt;p&gt;As of now, AutoGPT's choice to "abandon" vector databases likely stems from the realization that the operational and usage costs of employing these databases outweigh their benefits. Under these circumstances, building a solution from scratch aligns better with the long-term gains of the project. After all, in software development, premature optimization can lead to high development costs and risks, resulting in uncontrollable software complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Do we still need vector database?
&lt;/h3&gt;

&lt;p&gt;For scenarios requiring storage of vast amounts of vectors, such as extensive image or audiovisual retrieval, it's evident that using a vector database can offer more powerful and specialized functionalities. However, for scenarios with less substantial data volumes, employing libraries like Numpy in Python for computations might be more efficient and convenient. Within the realm of vector databases, there are various types, including lightweight and heavyweight options. Choosing between utilizing plugins like pgvector on PostgreSQL or opting for a dedicated distributed vector database necessitates specific application analysis before making a decision.&lt;/p&gt;

&lt;p&gt;As far as our current knowledge goes, not only AutoGPT but also other models like GPT Engineer, GPT Pilot, and even GitHub Copilot, refrain from using vector databases. Instead, they derive contextual relevance from recent files, proximity within the file system, or locating references to specific classes/functions.&lt;/p&gt;

&lt;p&gt;The decision to use vector databases depends on the specific context, and AutoGPT's abandonment of vector databases marks an important step in the right direction. This move reflects a focus on delivering value rather than getting bogged down in the technical intricacies.&lt;/p&gt;

</description>
      <category>database</category>
      <category>chatgpt</category>
      <category>vectordatabase</category>
    </item>
    <item>
      <title>Operations With Time Types in a Database</title>
      <dc:creator>RogerWoods</dc:creator>
      <pubDate>Thu, 09 Nov 2023 02:47:20 +0000</pubDate>
      <link>https://dev.to/rogerwoods/operations-with-time-types-in-a-database-2i63</link>
      <guid>https://dev.to/rogerwoods/operations-with-time-types-in-a-database-2i63</guid>
      <description>&lt;h2&gt;
  
  
  Addition and Subtraction of Days, Months, and Years
&lt;/h2&gt;

&lt;p&gt;In Oracle, when dealing with date types, you can directly add or subtract days. However, when it comes to manipulating months, you would use the add_months function:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQL&amp;gt; SELECT hiredate AS Hire Date,
          hiredate - 5 AS Minus 5 Days,
          hiredate + 5 AS Plus 5 Days,
          add_months(hiredate, -5) AS Minus 5 Months,
          add_months(hiredate, 5) AS Plus 5 Months,
          add_months(hiredate, -5 * 12) AS Minus 5 Years,
          add_months(hiredate, 5 * 12) AS Plus 5 Years
     FROM emp
     WHERE ROWNUM &amp;lt;= 1; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Addition and Subtraction of Hours, Minutes, and Seconds
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQL&amp;gt; SELECT hiredate AS Hire Date,
           hiredate - 5 / 24 / 60 / 60 AS Minus 5 Seconds,
           hiredate + 5 / 24 / 60 / 60 AS Plus 5 Seconds,
           hiredate - 5 / 24 / 60 AS Minus 5 Minutes,
           hiredate + 5 / 24 / 60 AS Plus 5 Minutes,
           hiredate - 5 / 24 AS Minus 5 Hours,
           hiredate + 5 / 24 AS Plus 5 Hours
      FROM emp
     WHERE ROWNUM &amp;lt;= 1;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Time Intervals in Hours, Minutes, and Seconds
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQL&amp;gt; SELECT Interval_Days,
           Interval_Days * 24 AS Interval_Hours,
           Interval_Days * 24 * 60 AS Interval_Minutes,
           Interval_Days * 24 * 60 * 60 AS Interval_Seconds
    FROM( SELECT MAX(hiredate) - MIN(hiredate) AS Interval_Days
    FROM emp
    WHERE ename IN ('WARD','ALLEN'))X;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Time Intervals in Days, Months, and Years
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SQL&amp;gt; SELECT max_hd - min_hd AS Days_Interval,
           months_between(max_hd, min_hd) AS Months_Interval,
           months_between(max_hd, min_hd) / 12 AS Years_Interval
      FROM (SELECT min(hiredate) as min_hd, MAX(hiredate) as max_hd FROM emp) x;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
    </item>
  </channel>
</rss>
