<?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: Jeff Davies</title>
    <description>The latest articles on DEV Community by Jeff Davies (@jdavies).</description>
    <link>https://dev.to/jdavies</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%2F645630%2Fd211ffdb-d1c2-4fbc-9352-306583341c1d.jpeg</url>
      <title>DEV Community: Jeff Davies</title>
      <link>https://dev.to/jdavies</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jdavies"/>
    <language>en</language>
    <item>
      <title>How to use Aggregate Functions in Stargate’s GraphQL API</title>
      <dc:creator>Jeff Davies</dc:creator>
      <pubDate>Thu, 08 Sep 2022 17:11:09 +0000</pubDate>
      <link>https://dev.to/datastax/how-to-use-aggregate-functions-in-stargates-graphql-api-gh8</link>
      <guid>https://dev.to/datastax/how-to-use-aggregate-functions-in-stargates-graphql-api-gh8</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0sqlpwuvs5mh4ss9hsu.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi0sqlpwuvs5mh4ss9hsu.jpeg" alt="Image description" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The Stargate GraphQL API has gotten even better with aggregate query functions. Get started using aggregate functions in your database with this short tutorial.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Aggregate functions are a relatively new feature in the release of Stargate for &lt;a href="https://astra.dev/3RwI2DM" rel="noopener noreferrer"&gt;Astra DB&lt;/a&gt;. If you’re not familiar with aggregate functions, they are functions that look at the data as a whole and perform a function like min(), max(), sum(), count() and avg().&lt;/p&gt;

&lt;p&gt;Until now, aggregate functions were only available using &lt;code&gt;cqlsh&lt;/code&gt; (the CQL Shell). However, with the &lt;a href="https://github.com/stargate/stargate/releases/tag/v1.0.25" rel="noopener noreferrer"&gt;Stargate 1.0.25&lt;/a&gt; release, they are now also available using the GraphQL API. In this blog entry, I’ll walk you through the process to get early access to this exciting new functionality in Stargate, and how to set up everything you need to test your own aggregate queries.&lt;/p&gt;

&lt;p&gt;Using &lt;code&gt;cqlsh&lt;/code&gt; to perform an aggregate query is pretty straightforward. Let’s assume you have an employee table with the following sales data:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffx9kpiqan64ggtpoe9io.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffx9kpiqan64ggtpoe9io.png" alt="Image description" width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we want to find the highest sale number for employee 1, John. Our &lt;code&gt;cqlsh&lt;/code&gt; query would look like the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6wm4vjknta2as8c81aim.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6wm4vjknta2as8c81aim.png" alt="Image description" width="800" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then it would return a single record:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ku2nj893lx99l1suc69.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ku2nj893lx99l1suc69.png" alt="Image description" width="800" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Prerequisites for this tutorial
&lt;/h1&gt;

&lt;p&gt;This blog tutorial assumes that you already have&lt;a href="https://www.docker.com/" rel="noopener noreferrer"&gt; Docker&lt;/a&gt; and&lt;a href="https://curl.se/" rel="noopener noreferrer"&gt; curl&lt;/a&gt; installed and configured on your machine. Alternatively, if you have an &lt;a href="https://astra.dev/3RwI2DM" rel="noopener noreferrer"&gt;Astra DB&lt;/a&gt; account (even with the free tier free) you can do your testing there.&lt;/p&gt;

&lt;h1&gt;
  
  
  Getting Stargate
&lt;/h1&gt;

&lt;p&gt;If you are using Astra DB you can skip this part and go to the next section.&lt;/p&gt;

&lt;p&gt;The main repository for the Stargate source code is on &lt;a href="https://github.com/stargate/stargate" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;a href="https://github.com/stargate/stargate" rel="noopener noreferrer"&gt; &lt;/a&gt;However, I recommend just using the Docker container that is already configured for testing and run this command:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mjtzacu9ulkmu0jwt1n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1mjtzacu9ulkmu0jwt1n.png" alt="Image description" width="800" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your Docker instance of Stargate will load and start executing.&lt;/p&gt;

&lt;h1&gt;
  
  
  Preparing Your Test Environment
&lt;/h1&gt;

&lt;p&gt;Next, we need to create our &lt;em&gt;keyspace&lt;/em&gt; and &lt;em&gt;table&lt;/em&gt;. Then we will load our test table with test data. While it is possible to do almost all of this using &lt;a href="https://graphql.org/" rel="noopener noreferrer"&gt;GraphQL&lt;/a&gt;, I did most of it using the REST API since that is the API.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: All of these URLs are designed for the Docker container running locally on your machine. If you are using Astra, adjust the URLs accordingly.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once the Docker image is fully up and running, you will need to get authentication credentials for the Cassandra instance it contains. Use this curl command to get the authentication token:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhnjwjcn4lzrn6ezifv3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhnjwjcn4lzrn6ezifv3.png" alt="Image description" width="800" height="106"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set the auth token as an environment variable for easy reuse.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3hjkj147rpvvwm6iort.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3hjkj147rpvvwm6iort.png" alt="Image description" width="800" height="63"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now run the following command to get a list of existing keyspaces. This is a good test to ensure you’ve set your authToken environment variable correctly:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjw3rzeg13a6c03ybocaw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjw3rzeg13a6c03ybocaw.png" alt="Image description" width="800" height="129"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should see the following output from the command:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyviiitd9c4b1iribnf7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvyviiitd9c4b1iribnf7.png" alt="Image description" width="800" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, we need to create our keyspace for our database. The following command will create the test keyspace:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyy75cwwzr5m1rl9h761j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyy75cwwzr5m1rl9h761j.png" alt="Image description" width="800" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we need to create our employee table in the &lt;em&gt;test&lt;/em&gt; keyspace. This command is rather lengthy for a blog post so I recommend getting the create_table.sh file from the &lt;a href="https://github.com/jdavies/blogs/blob/master/20210602_aggregate_stargate/create_table.sh" rel="noopener noreferrer"&gt;GitHub repository&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It’s time to load some data into our table. The easiest way to do this is to download the&lt;a href="https://github.com/jdavies/blogs/blob/master/20210602_aggregate_stargate/load_data.sh" rel="noopener noreferrer"&gt; load_data.sh&lt;/a&gt; file from my GitHub repository (another blog-unfriendly script) and execute it via the command:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F81vopqhnkg0au90bttyd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F81vopqhnkg0au90bttyd.png" alt="Image description" width="800" height="64"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This contains the curl commands to load the records into your Docker database.&lt;/p&gt;

&lt;p&gt;Once the data is loaded, let’s run a quick query to ensure that everything is as we expect. Execute the following command:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkzbfv6ooo92argkwg0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwkzbfv6ooo92argkwg0x.png" alt="Image description" width="800" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should get all nine rows of data back. They can be a little hard to read from the terminal. If you want to see a prettier version, I suggest copying the resulting text and pasting it into an online JSON browser like&lt;a href="https://jsonbeautifier.org/" rel="noopener noreferrer"&gt; jsonbeautifier.org&lt;/a&gt;. You should see the following nine rows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7s9wfxtuvo9kka77wgvp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7s9wfxtuvo9kka77wgvp.png" alt="Image description" width="800" height="224"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now we are ready to get down to business!&lt;/p&gt;

&lt;h1&gt;
  
  
  Using Aggregate Queries
&lt;/h1&gt;

&lt;p&gt;Since I’m new to GraphQL, it seems strange to me. Although once you get used to its way of doing things (like omitting commas in a JSON-esque data format) it’s pretty straightforward. Here is the curl command that will retrieve the highest sales year for employee 1, named John:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51r1oa6uoeqnq1912xwl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F51r1oa6uoeqnq1912xwl.png" alt="Image description" width="800" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The payload is a little hard to read on the command line, so here it is in GraphQL format:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmhwxfokxd3n9w00bvm0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbmhwxfokxd3n9w00bvm0.png" alt="Image description" width="800" height="309"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you examine the command, you will see how we included the max() aggregate command (named as “highest_sale”). Just like a cqlsh version of the call, the max() function is applied to the &lt;em&gt;return&lt;/em&gt; values, not the &lt;em&gt;select&lt;/em&gt; criteria. Your output should match the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fntti98oy0hzxagzjhptj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fntti98oy0hzxagzjhptj.png" alt="Image description" width="750" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How about searching for the highest sale of all time? Here’s how you do it:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F907yajb0jxen58wrqkvw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F907yajb0jxen58wrqkvw.png" alt="Image description" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By removing the “where” clause from the GraphQL statement (traditionally in the parenthesis after the table name), you can search the entire table, across all partitions.&lt;/p&gt;

&lt;p&gt;In &lt;code&gt;cqlsh&lt;/code&gt; this is the equivalent of adding &lt;code&gt;ALLOW FILTERING&lt;/code&gt;, which in general is regarded as a “bad thing” since it forces a full table scan across all partitions, which can be very slow. While aggregate functions are often used for reporting, it might be acceptable to do this for a few special queries.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;ALLOW FILTERING&lt;/code&gt; isn’t necessarily bad, but you have to understand what it does and use it sparingly if you want to keep your database performing at max speed. &lt;code&gt;ALLOW FILTERING&lt;/code&gt; can come in very handy when we’re invoking a &lt;code&gt;SELECT&lt;/code&gt; operation on a single partition (for example, providing the full partition keys at the very minimum, which is &lt;code&gt;id&lt;/code&gt; in this &lt;code&gt;test.employee&lt;/code&gt; table’s case).&lt;/p&gt;

&lt;p&gt;On a final note, bear in mind this is GraphQL API-specific. It won’t work with the REST or Document APIs.&lt;/p&gt;

&lt;p&gt;Get started with aggregate queries now on &lt;a href="https://astra.dev/3RwI2DM" rel="noopener noreferrer"&gt;Astra DB&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Get up to speed faster with tutorials on our &lt;a href="https://www.youtube.com/channel/UCqA6zOSMpQ55vvguq4Y0jAg" rel="noopener noreferrer"&gt;DataStax Developers YouTube channel&lt;/a&gt; and subscribe to our &lt;a href="https://twitter.com/DataStaxDevs" rel="noopener noreferrer"&gt;DataStax Dev Twitter channel&lt;/a&gt; to get notified about new blogs. For exclusive posts on all things data, follow &lt;a href="https://datastax.medium.com/" rel="noopener noreferrer"&gt;DataStax on Medium&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Join our Discord: &lt;a href="https://discord.com/invite/pPjPcZN" rel="noopener noreferrer"&gt;Fellowship of the (Cassandra) Rings&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://datastax.medium.com/build-your-first-app-with-javascript-node-js-and-datastax-astra-db-573abc238583" rel="noopener noreferrer"&gt;Build your first app with javascript, node js and Astra DB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Astra DB — &lt;a href="https://astra.dev/3RwI2DM" rel="noopener noreferrer"&gt;Apache Cassandra as a service&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.datastax.com/blog/fast-lane-and-open-data-stack" rel="noopener noreferrer"&gt;The Fast Lane and the Open Data Stack&lt;/a&gt; — exciting news from DataStax CEO Chet Kapoor&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://jeffmdavies.medium.com/compiling-stargate-38f70c0e8eea" rel="noopener noreferrer"&gt;Compiling Stargate&lt;/a&gt; — more tips from Jeff Davies&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>Aggregate Functions in GraphQL</title>
      <dc:creator>Jeff Davies</dc:creator>
      <pubDate>Tue, 08 Jun 2021 15:50:58 +0000</pubDate>
      <link>https://dev.to/jdavies/aggregate-functions-in-graphql-399m</link>
      <guid>https://dev.to/jdavies/aggregate-functions-in-graphql-399m</guid>
      <description>&lt;p&gt;If you're wondering how to perform aggregate functions in Stargate or Astra, check out my latest blog here: &lt;a href="https://jeffmdavies.medium.com/aggregate-functions-in-stargates-graphql-api-30c80da3a10"&gt;https://jeffmdavies.medium.com/aggregate-functions-in-stargates-graphql-api-30c80da3a10&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cassandra</category>
      <category>graphql</category>
      <category>astra</category>
      <category>datastax</category>
    </item>
  </channel>
</rss>
